猫鼬-根据阵列中的ID查找文档

时间:2020-09-27 15:17:41

标签: mongodb express mongoose

我有一个像这样的mongoID数组

arrayOfIDs = ['mongoID1','mongoID2','mongoID3']

这些是我收藏中文件的mongo-id。

现在,通过获取这些mongoID的数组,即['mongoID1','mongoID2','mongoID3'],我需要使用其_id查询由这些ID指定的每个文档,并处理其数据在我的代码逻辑中是独立的。 为简单起见,我只是“打印”输出即res.json(doc.name)

如果需要,Mongoose / MongoDB中确实存在

Shop.find({'_id':['mongoID1','mongoID2','mongoID3']})
    .exec()
    .then(doc =>{
       res.json(doc.name)
    })

我知道我可以在这种情况下使用循环,

for(id of arrayOfIDs){
    Shop.find({'_id': id})
        .exec()
        .then(doc =>{
           res.json(doc.name)
        })
}

但这涉及基于arrayOfID的长度多次查询数据库,这是我不想要的。我想有一个本机的mongodb解决方案,就像上面的示例一样,它仅在mongodb查询中传递ID。

您能告诉我如何实现吗?

1 个答案:

答案 0 :(得分:1)

您可以使用$in运算符。

{ _id: { $in: ["mongoID1", "mongoID2", "mongoID3"] } }

如果_id的类型为ObjectId,则需要先将它们转换为ObjectId,然后再通过

{
  _id: {
    $in: [
      mongoose.Types.ObjectId("mongoID1"),
      mongoose.Types.ObjectId("mongoID2"),
      mongoose.Types.ObjectId("mongoID3"),
    ],
  },
}