MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak uzyskać dostęp do atrybutów obiektu odpytywanych z Mongo w Meteor?

find Metoda zwraca kursor, a nie obiekt ani tablicę. Aby uzyskać dostęp do obiektu, musisz albo pobrać go z kursora

var skill = Skills.find(Session.get('selected_skill')).fetch()[0];

lub uzyskaj go bezpośrednio za pomocą findOne :

var skill = Skills.findOne(Session.get('selected_skill'));

Następnie możesz go używać tak jak każdego innego obiektu js:

console.log(skill.mana);
skill._cache = {cooldown: true};

Pamiętaj, że po stronie klienta metody zbierania, takie jak find są nieblokujące. Zwracają to, co Meteor ma w pamięci podręcznej, niekoniecznie to, co znajduje się w bazie danych po stronie serwera. Dlatego zawsze powinieneś używać ich w kontekście reaktywnym lub upewnić się, że wszystkie dane zostały pobrane przed wykonaniem (nie martw się o to drugie, dopóki nie opanujesz biegle Meteor, zacznij od pierwszego sposobu).

Musisz także pamiętać, że z tego powodu findOne i find.fetch może zwrócić null / pusta tablica, nawet jeśli odpowiedni element znajduje się w db (ale nie został jeszcze zbuforowany). Jeśli nie weźmiesz tego pod uwagę w swoich funkcjach reaktywnych, napotkasz błędy.

Template.article.slug = function() {
    var article = Articles.findOne(current_article);
    if(!article) return '';
    return slugify(article.title);
};

Jeśli nie uciekliśmy z funkcji za pomocą if(!article) , wyrażenie article.title zgłosi błąd w pierwszym obliczeniu, ponieważ article byłby niezdefiniowany (zakładając, że nie był wcześniej buforowany).

Gdy chcesz zaktualizować bazę danych po stronie klienta, możesz zmienić tylko jeden element na raz i musisz odwoływać się do elementu przez jego _id . Wynika to ze względów bezpieczeństwa. Twoja linia była w porządku:

Skills.update(Session.get('selected_skill'), {$inc: {mana: 1}});

alert() to funkcja, która zwraca nieokreślone, bez względu na to, czym go karmisz.

alert(42); // -> undefined

Ogólnie jest daleko lepiej debugować za pomocą console.log niż z alert .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. replika Ustaw mongo docker-compose

  2. $near wymaga punktu geojson, podany punkt geojson

  3. Zapytanie o datę MongoRepository JSON (wiosna)

  4. PHP nie może załadować biblioteki dynamicznej (mongo.so)

  5. Mongoose:populate() / DBref czy powielanie danych?