MongoDB-如何通过ID查找文档并查找与ID数组匹配的文档

时间:2019-02-22 13:40:24

标签: node.js database mongodb mongoose mongodb-query

我遇到以下问题,我的收藏夹中有很多文件遵循这种结构

{
"_id": ObjectId("5c6ec80df2f9d02d08ce6b3c"),
"id": "0", 
"name": "first",
"details": "these are the details of each doc",
"relatedDocsIds": ["1","2"]
}

在集合中不再重复“ id”参数。

我想获取具有具有相关DocsId的id的完整文档。

我给出要从ID数组中获取完整相关文档的文档的“ id”。

因此在此示例中,我要获取文档的相关文档为“ 0”,其相关文档的ID存储在数组“ relatedDocsIds”中。

查询如何?

我在nodejs后端中,我需要响应为包含该查询文档的json。

2 个答案:

答案 0 :(得分:0)

为此,应结合使用aggregate$unwind运算符使用mongodb $lookup

$ unwind从输入文档中解构一个数组字段,以输出每个元素的文档。

$ lookup对同一数据库中未分片的集合执行左外部联接,以从“联接”的集合中筛选文档进行处理。

这是最终查询:

db.yourCollection.aggregate([
  {
    $unwind: "$relatedDocsIds"
  },
  {
   $lookup:{
       from: "yourCollection",
       localField: "relatedDocsIds",
       foreignField: "id",
       as: "relatedDocs"
    }
  }
])

在猫鼬中,您可以这样操作:

Model.aggregate([
  {
    $unwind: "$relatedDocsIds"
  },
  {
   $lookup:{
       from: "yourCollection",
       localField: "relatedDocsIds",
       foreignField: "id",
       as: "relatedDocs"
    }
  }
]).exec((err, docs) => {
  if (err) throw err;
  console.log(docs);
});

我建议您反对这种方法,因为猫鼬有一个填充方法,它将使您能够执行此操作,而基准测试表明它比mongodb聚合要快。

答案 1 :(得分:-1)

我认为它是使用MongoDB查询数组运算符的最简单方法

MongoDB Query Arrays

MongoDB $in operator

示例:

getCollection('collectionName').find({
  relatedDocsIds: {
    $in: ['0']
  }
})