如果_id不在数组中,我会尝试从集合中查找所有文档。
这是我的代码:
warehouses.find(query, items).toArray(function (error, docs) {
if (error) {
error(error);
return;
}
if (docs) {
var material = db.collection('material');
material.find({$nin: {'_id': docs[0].items}}, function (e, items) {
if (error) {
error(error);
return;
}
success(items);
});
}
});
在material.find行中,currentItems有两个ObjectsID,但是find的返回是空的......出了什么问题?
答案 0 :(得分:0)
它与nodejs的事件循环功能有关。每个回调函数都是并行执行的。因此,虽然以"material.find"
开头的行开始执行,但可能是
function (item, index) {
currentItems[index] = item._id;
}
仍在执行中。这就是为什么你得到一个空的结果。为了实现您的目标,您应该只在一个回调函数中完成所有工作。请按照以下步骤操作:
currentItems
变量)。因此,您可以删除doc.items.foreach....
material.find....
。