sql >> Databáze >  >> NoSQL >> MongoDB

Jak získáte přístup k atributům objektu dotazovaného z Mongo v Meteoru

find metoda vrací kurzor, nikoli objekt ani pole. Pro přístup k objektu jej musíte buď načíst z kurzoru

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

nebo jej získejte přímo pomocí findOne :

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

Pak jej můžete použít stejně jako jakýkoli jiný objekt js:

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

Mějte na paměti, že na straně klienta se používají metody shromažďování, jako je find jsou neblokující. Vracejí vše, co má Meteor v mezipaměti, ne nutně to, co je v databázi na straně serveru. Proto byste je měli vždy používat v reaktivním kontextu nebo se ujistit, že všechna data byla načtena před spuštěním (nedělejte si starosti s tím druhým, dokud nebudete ovládat Meteor, začněte prvním způsobem).

Také musíte mít na paměti, že kvůli tomu findOne a find.fetch může vrátit null / prázdné pole, i když je odpovídající prvek v db (ale ještě nebyl uložen do mezipaměti). Pokud to ve svých reaktivních funkcích nezohledníte, narazíte na chyby.

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

Pokud jsme z funkce neunikli pomocí if(!article) , výraz article.title by vyvolalo chybu v prvním výpočtu, jako article by byl nedefinovaný (za předpokladu, že nebyl dříve uložen do mezipaměti).

Když chcete aktualizovat databázi ze strany klienta, můžete změnit pouze jednu položku v čase a musíte na položku odkazovat pomocí jejího _id . Je to z bezpečnostních důvodů. Vaše linka na to byla v pořádku:

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

alert() je funkce, která vrací undefined bez ohledu na to, čím jej krmíte.

alert(42); // -> undefined

Obecně je to daleko lepší je ladit pomocí console.log než u alert .




  1. MongoDB - $project vnořený dokument do kořenové úrovně

  2. Existuje způsob, jak najít konkrétní klíč na konkrétní instanci redis v režimu clusteru?

  3. Jak vytvořit částečný index s proměnným datem?

  4. MongoDB a C#:Vyhledávání bez rozlišení velkých a malých písmen