sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kommer du åt attribut för ett objekt som frågas från Mongo i Meteor

find metod returnerar en markör, inte objekt eller array. För att komma åt objektet måste du antingen hämta det från markören

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

eller få det direkt med findOne :

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

Sedan kan du använda det precis som vilket annat js-objekt som helst:

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

Tänk på att insamlingsmetoder som find på klientsidan är icke-blockerande. De returnerar allt Meteor har i cachen, inte nödvändigtvis det som finns i serversidans db. Det är därför du alltid bör använda dem i ett reaktivt sammanhang, eller se till att all data har hämtats innan exekvering (oroa dig inte för det senare förrän du är flytande med Meteor, börja med det första sättet).

Du måste också komma ihåg att på grund av detta, findOne och find.fetch kan returnera null / tom array, även när motsvarande element är i db (men ännu inte har cachelagrats). Om du inte tar hänsyn till det i dina reaktiva funktioner kommer du att stöta på fel.

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

Om vi ​​inte flydde från funktionen med if(!article) , uttrycket article.title skulle skapa ett fel i den första beräkningen, som article skulle vara odefinierad (förutsatt att den inte cachades tidigare).

När du vill uppdatera databasen från klientsidan kan du bara ändra ett objekt åt gången, och du måste referera till objektet med dess _id . Detta på grund av säkerhetsskäl. Din linje för detta var ok:

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

alert() är en funktion som returnerar odefinierat oavsett vad du matar den.

alert(42); // -> undefined

I allmänhet är det långt bättre att felsöka med console.log än med alert .




  1. Skalbar fillagring

  2. Koncernsträng efter grupp

  3. Konfigurera MongoDB-CR-autentisering som standard på MongoDB 3.x

  4. Mongodb kan inte starta på grund av WiredTiger.turtle-behörigheter