sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan får du adgang til attributter for et objekt, der forespørges fra Mongo i Meteor

find metode returnerer en markør, ikke objekt eller matrix. For at få adgang til objektet skal du enten hente det fra markøren

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

eller få det direkte med findOne :

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

Så kan du bruge det ligesom ethvert andet js-objekt:

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

Husk, at på klientsiden er indsamlingsmetoder som find er ikke-blokerende. De returnerer alt, hvad Meteor har i cachen, ikke nødvendigvis det, der er i server-side db. Derfor bør du altid bruge dem i en reaktiv kontekst eller sikre, at alle data er blevet hentet før udførelse (du skal ikke bekymre dig om sidstnævnte, før du er flydende med Meteor, start med den første måde).

Du skal også huske på, at på grund af dette, findOne og find.fetch kan returnere null / tomt array, selv når det tilsvarende element er i db (men endnu ikke er blevet cachelagret). Hvis du ikke tager højde for det i dine reaktive funktioner, vil du løbe ind i fejl.

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

Hvis vi ikke flygtede fra funktionen med if(!article) , udtrykket article.title ville rejse en fejl i den første beregning, som article ville være udefineret (forudsat at den ikke var cachelagret tidligere).

Når du vil opdatere databasen fra klientsiden, kan du kun ændre ét element ad gangen, og du skal henvise til elementet ved dets _id . Dette skyldes sikkerhedsmæssige årsager. Din linje for dette var ok:

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

alert() er en funktion, der returnerer udefineret, uanset hvad du fodrer den med.

alert(42); // -> undefined

Generelt er det langt bedre at fejlsøge med console.log end med alert .




  1. Standardværdien er ikke angivet, mens du bruger Update with Upsert som sand

  2. Hent værdierne fra array og gem det i csv-fil ved hjælp af MongoDB

  3. Promise og nodejs MongoDB driver

  4. Hvordan får jeg den dato, en MongoDB-samling blev oprettet ved hjælp af MongoDB C#-driver?