当前位置: 首页 > 知识库问答 >
问题:

Mongoose-根据数组中的ID查找文档

彭硕
2023-03-14

我有一系列这样的Mongoid

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

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

现在,通过获取这些mongoIDs的数组,即['mongoID1','mongoID2','mongoID3'],我需要通过使用其_id来查询这些id指定的每个文档,并在我的代码逻辑中独立处理其数据。为了简单起见,我刚刚“打印”了输出ieres.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)
        })
}

但这涉及到根据arrayOfIDs的长度多次查询数据库,这是我不想要的。我希望有一个本机mongodb解决方案,只需在mongodb查询中传递ID,如上面的示例所示。

你能告诉我如何做到这一点吗?

共有1个答案

曾云
2023-03-14

您可以在操作符中使用$。

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

如果id的类型是ObjectId,则需要在传递之前将其转换为ObjectId

{
  _id: {
    $in: [
      mongoose.Types.ObjectId("mongoID1"),
      mongoose.Types.ObjectId("mongoID2"),
      mongoose.Types.ObjectId("mongoID3"),
    ],
  },
}
 类似资料:
  • 问题内容: 我有一个_ids数组,我想相应地获取所有文档,最好的方法是什么? 就像是 … 该数组可能包含数百个_id。 问题答案: mongoose中的函数是对mongoDB的完整查询。这意味着您可以使用方便的mongoDB 子句,该子句的工作方式与SQL版本相同。 即使对于包含成千上万个id的数组,此方法也将很好地工作。(请参阅有效确定记录的所有者) 我建议任何与工作有关的人员通读优秀的mong

  • 以下是两种猫鼬模式: 雇员模式: 员工详细模式: 雇员详细模式数据会按需保存,例如当特定状态分配给雇员时。在这种情况下,一旦保存了雇员详细信息文档,相应的雇员详细信息ID就会保存回雇员模式作为雇员详细信息ID 现在,员工模式和员工模式之间存在双向关系。 用例: 我想找到所有被标记为特定状态的员工。假设输入状态ID为,那么我想获取EmployeeDetail文档中状态ID为的所有员工。 以下是我尝试

  • 问题内容: 假设我有一个名为的模型。我有一个带有对象ID的数组。 我想获取与我拥有的ID数组“相交”的所有用户记录。 问题答案: 您需要使用$ in运算符> https://docs.mongodb.com/manual/reference/operator/query/in/#op._S_in 例如:

  • 问题内容: 我有Mongoose架构,其中有一个天属性 我想查找输入的最后一天的数据,所以说今天就是我要查找输入的最后一天。或者说另一种说法。什么是属性小于等于但大于所有其他文档的文档呢? 或另一种方式 属性小于等于的所有文档集中的最大元素是什么 然后遍历我所有的文档,我该怎么做呢? 问题答案: 在外壳中将是: 查找所有小于16085 的文档,对它们进行降序排序,然后采用第一个。 在Mongoos

  • 如果我从问题中选择“q1”,我如何从答案中选择第一个数组? 这是我现在的代码:

  • 树形结构如图 比如说有一个id数组arr=[2,7,8] 根据这个数组获取所有id相同的name,返回一个name数组 树形结构示例如下