sql >> Database >  >> NoSQL >> MongoDB

Hoe krijg je toegang tot attributen van een object dat is opgevraagd bij Mongo in Meteor

find methode retourneert een cursor, geen object of array. Om toegang te krijgen tot het object, moet u het ofwel van de cursor halen

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

of ontvang het rechtstreeks met findOne :

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

Dan kunt u het net als elk ander js-object gebruiken:

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

Houd er rekening mee dat aan de kant van de klant verzamelmethoden zoals find zijn niet-blokkerend. Ze retourneren wat Meteor in de cache heeft, niet noodzakelijkerwijs wat zich in de server-side db bevindt. Daarom moet je ze altijd in een reactieve context gebruiken, of ervoor zorgen dat alle gegevens zijn opgehaald voordat ze worden uitgevoerd (maak je geen zorgen over dat laatste totdat je vloeiend bent met Meteor, begin met de eerste manier).

Houd er ook rekening mee dat daarom findOne en find.fetch kan null retourneren / lege array, zelfs als het corresponderende element zich in db bevindt (maar nog niet in de cache is opgeslagen). Als je daar geen rekening mee houdt in je reactieve functies, loop je tegen fouten aan.

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

Als we niet uit de functie zijn ontsnapt met if(!article) , de uitdrukking article.title zou een fout opleveren in de eerste berekening, zoals article zou ongedefinieerd zijn (ervan uitgaande dat het niet eerder in de cache was opgeslagen).

Als u de database vanaf de clientzijde wilt bijwerken, kunt u slechts één item per keer wijzigen en moet u naar het item verwijzen met zijn _id . Dit vanwege veiligheidsredenen. Je regel hiervoor was ok:

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

alert() is een functie die teruggeeft ongedefinieerd, wat je ook voedt.

alert(42); // -> undefined

Over het algemeen is het ver beter te debuggen met console.log dan met alert .




  1. Hoe sorteeropties voor een MongoDB-verzameling bekijken of wijzigen?

  2. Spring Data MongoDB Repository met aangepaste collectienaam

  3. MongoDB vs MySQL NoSQL - Waarom Mongo beter is

  4. Hoe een nieuwe URL van mongodb 3.6 te gebruiken om verbinding te maken vanuit golang