MongoDB在NodeJS中找不到它

时间:2014-03-17 11:27:38

标签: node.js mongodb

如果_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的返回是空的......出了什么问题?

1 个答案:

答案 0 :(得分:0)

它与nodejs的事件循环功能有关。每个回调函数都是并行执行的。因此,虽然以"material.find"开头的行开始执行,但可能是

function (item, index) {
        currentItems[index] = item._id;
}

仍在执行中。这就是为什么你得到一个空的结果。为了实现您的目标,您应该只在一个回调函数中完成所有工作。请按照以下步骤操作:

  • 在第一个查询中仅选择ID(在查询中填充currentItems变量)。因此,您可以删除doc.items.foreach....
  • 然后在查询的回调函数内调用函数material.find....