2016-04-19 14 views
0

Ich habe einen Datensatz in meiner Sammlung namens Pflanzen geladen. Hier ist ein Beispiel für eine Pflanze:Meteor manipulieren Mongodb Daten von Funktion

{ 
"_id": "zGdXzfFTAzhrhCvqE", 
"Plant": "Carrot", 
"Companions": ["Beetroot", "Dandelion", "Rose"] 
} 

ich brauche, um meine Sammlung zu aktualisieren, so dass jeder Begleiter ist ein Rekord (hat eine _id), so zuerst muß ich überprüfen, ob der Begleiter bereits eine _id hat, aber ich kann‘ t scheint die Syntax richtig zu machen.

//why does'nt this work? 
    var com = Plants.find({"Plant": "Thyme"}); 
    console.log("id: " + com._id); //returns undefined, even though it exists in the collection 

    //this works 
    Plants.find({}).forEach(function(plant){ 
    var companions = plant.Companions; 
    console.log(companions[0]); //prints out the first plantname in the array 

    //here I need to check if the plant is already in the collection 
    for(var i = 0; i < companions.length; i++){ 
     var com_plante = Plants.findOne(companions[i]); 
     //this writes out undefined 
     console.log("com_plante: " + com_plante._id + " " + com_plante.Plant); 
    } 
    } 

Was ist falsch an meiner Syntax?

Antwort

1

Verwenden findOne statt:

var com = Plants.findOne({"Plant": "Thyme"}); 

findOne gibt einen einzelnen Datenelement den Wähler entsprechen. Umgekehrt gibt find einen Cursor zurück, der durch übereinstimmende Elemente iteriert. Offensichtlich hat der Cursor selbst nicht die gleichen Eigenschaften wie ein einzelnes Element. Der Cursor kann über die Methode fetch() in ein Array von Elementen konvertiert werden.

+0

Danke. Ich bin noch ein Neuling ... – Heidi

0

Ihre zweite Suche (innerhalb der Schleife) auf einer Zeichenfolge basiert, aber Sie verwenden die Abkürzung für die Suche nach _id:

var com_plante = Plants.findOne(companions[i]); 

Wenn .find() oder .findOne() eine einzige skalare Argument sehen sie nur überprüfen Sie die _id Schlüssel für ein Spiel.

Verwendung:

var com_plante = Plants.findOne({Plant: companions[i]});