Arrays mongodb:在对象数组中搜索集合中的所有ID
我有一个只包含objectid的对象数组,希望在集合中搜索所有具有这些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
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 });