Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays mongodb:在对象数组中搜索集合中的所有ID_Arrays_Mongodb_Search - Fatal编程技术网

Arrays mongodb:在对象数组中搜索集合中的所有ID

Arrays mongodb:在对象数组中搜索集合中的所有ID,arrays,mongodb,search,Arrays,Mongodb,Search,我有一个只包含objectid的对象数组,希望在集合中搜索所有具有这些id的文档 var数组=[{{u id:5551e59be360594cd3319644}, {u id:5551e59be360594cd3319631}, {u id:5551e59be360594cd33195d2}, {u id:5551e59be360594cd3319627}; 以下是我目前为获得结果所做的工作: for(变量i=0;i

我有一个只包含objectid的对象数组,希望在集合中搜索所有具有这些id的文档

var数组=[{{u id:5551e59be360594cd3319644},
{u id:5551e59be360594cd3319631},
{u id:5551e59be360594cd33195d2},
{u id:5551e59be360594cd3319627};
以下是我目前为获得结果所做的工作:

for(变量i=0;i
我尝试使用
$in
操作符,但没有成功,因为它不是一个ID数组,而是一个包含这些ID的对象数组

有没有其他方法只使用一个数据库查询就可以做到这一点,因为我认为在for循环中执行这么多数据库查询不是一个好主意

编辑 我现在用map方法(比如@chrisdam explained)尝试了它,所以我有一个ID数组,但当我将它传递给find方法时,我得到了以下结果:

EDIT2 不要终止我的第一次编辑。
find()
只返回一个光标,而不是文档本身。因此我使用了
toArray()
。感谢您的帮助@chrisdam!!


您可以尝试JavaScript的本机方法来生成ObjectID数组,然后可以与操作符一起使用,如下所示:

var array = [{ _id: "5551e59be360594cd3319644" },
             { _id: "5551e59be360594cd3319631" },
             { _id: "5551e59be360594cd33195d2" },
             { _id: "5551e59be360594cd3319627" }],    
    ids = array.map(function (obj){ return ObjectId(obj._id)});

db.collection.find({ "_id": { "$in": ids }});
或者只需将操作符用作:

var array = [{ _id: "5551e59be360594cd3319644" },
             { _id: "5551e59be360594cd3319631" },
             { _id: "5551e59be360594cd33195d2" },
             { _id: "5551e59be360594cd3319627" }],    
    ids = array.map(function (obj){ return { _id: ObjectId(obj._id) } });   

db.collection.find({ "$or": ids });

为什么不在列表上循环并创建一个只包含ID的新列表,然后使用
$in
操作符使用它。@先生,我们基本上是通过map函数实现的,不是吗?有没有一种方法可以在单个查询中获取ID,然后为这些ID获取相应的对象(可能是通过某种形式的聚合)?谢谢
var array = [{ _id: "5551e59be360594cd3319644" },
             { _id: "5551e59be360594cd3319631" },
             { _id: "5551e59be360594cd33195d2" },
             { _id: "5551e59be360594cd3319627" }],    
    ids = array.map(function (obj){ return { _id: ObjectId(obj._id) } });   

db.collection.find({ "$or": ids });