我在我的名为Plants的集合中加载了一个数据集。这是一个植物的例子:
{
"_id": "zGdXzfFTAzhrhCvqE",
"Plant": "Carrot",
"Companions": ["Beetroot", "Dandelion", "Rose"]
}
我需要更新我的收藏,以便每个伴侣都是一个记录(有一个_id),所以首先我要检查伴侣是否已经有一个_id,但我似乎无法正确使用语法。
//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);
}
}
我的语法有什么问题?
答案 0 :(得分:1)
改为使用findOne
:
var com = Plants.findOne({"Plant": "Thyme"});
findOne
返回与选择器匹配的单个数据项。相反,find
会返回迭代匹配项的游标。显然,光标本身并不具有与单个项目相同的属性。可以通过fetch()
方法将光标转换为项目数组。
答案 1 :(得分:0)
您的第二次搜索(在循环内)基于字符串,但您使用简写进行搜索var com_plante = Plants.findOne(companions[i]);
:
.find()
当.findOne()
或_id
看到单个标量参数时,他们只会检查匹配的var com_plante = Plants.findOne({Plant: companions[i]});
密钥。
使用:
for