我想如果可以更新一个集合中所有文档的字段,并引用另一个文档。我试着用下面的代码做到这一点:
var project = db.Project.find({slug:"engine"});
db.Activity.update({}, {$set:{'project':DBRef("Project", project._id, "mydb")}});
当我在"project“字段中查看活动文档时,结果是:
{
_id: ObjectId("..."),
"project": DBRef("Project", undefined, "mydb")
}
有没有一种方法可以正确做到这一点?
提前谢谢。
发布于 2017-02-23 13:02:45
在我看来你遇到了承诺回调的问题。你可以用两种方法解决这个问题:
选项一:根据返回的数据将函数放入第一个函数的回调中,例如:
db.Project.find({slug:"engine"}, function(error, data) {
db.activity.update(...data.Id...);
});
选项二:等待find的返回完成:
var project = db.Project.find({slug:"engine"});
project.then(function(error,data) {
db.activity.update(...project.Id...);
});
这两种方法都应该有效。问题是,当您进行第一个调用时,它返回一个promise,而不是值本身。如果你对这个话题感到困惑,你可以看看:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
希望我的回答对你有帮助。
https://stackoverflow.com/questions/42412223
复制