我想做类似的事情:
db.ratings.find().forEach(function(doc){
var item = db.items.find({_id: doc.item_id})
var ry = item.detail.ry
db.ratings.update(doc,{$set: {itd: ry}})
})
问题是db.items.find({_id: doc.item_id})
正在返回一些我无法直接调用文档属性的内容。这样做的正确方法是什么?谢谢!
db.items:
{
"_id" : ObjectId("5461c8f0426f727f16000000"),
"n" : "The Shawshank Redemption",
"detail" : {
"ry": 1992
}
}
答案 0 :(得分:14)
find()
函数返回cursor
,您需要迭代它:
当find()方法“返回文档”时,实际上是方法 将光标返回到文档
您的代码已更新:
db.ratings.find().forEach(function(doc){
db.items.find({_id: doc.item_id}).forEach(function(item){
var ry = item.detail.ry;
db.ratings.update(doc,{$set: {itd: ry}});
})
})
或者您可以使用findOne()
返回其中一个匹配的文档。
db.ratings.find().forEach(function(doc){
var item = db.items.findOne({_id: doc.item_id})
var ry = item.detail.ry
db.ratings.update(doc,{$set: {itd: ry}})
})