如何根据MongoDB中的_id join 2个文档进行查询?

How to query by joining 2 documents based on the _id in MongoDB?

我有一个像下图这样的数据模型,它们都在同一个集合中,当然数据结构不同。我在文档电影和文档工作室中使用了手册参考。例如像下面的代码:

我有一些任务需要将 2 个文档连接在一起以获取数据。例如,”表示电影中演员的姓氏为“Battson”。但我知道 MongoDB 没有不支持连接文档,例如在 RDBMS 中连接 2 个表。

我曾尝试在 MongoDB shell 中使用下面的代码,但没有任何意义。我想我需要从结果查询中的 _id 中获取值,然后将它们推入数组 array_idActor 以便第二个代码可以 运行:

const array_idActor = db.getCollection('movies_subject').find({last_name: /Battson/})
db.getCollection('movies_subject').find({actors:{$elemMatch:{person_id:{$in:array_idActor}}}}).pretty()

请帮我解决这个问题。非常感谢。

加入两个collections

db.people.aggregate([
  {
    "$match": {
      "last_name": "Battson"
    }
  },
  {
    "$lookup": {
      "from": "movies",
      "localField": "_id",
      "foreignField": "actors.person_id",
      "as": "movie_docs"
    }
  }
])

mongoplayground


加入collections

db.people.aggregate([
  {
    "$match": {
      "last_name": "Battson"
    }
  },
  {
    "$lookup": {
      "from": "movies",
      "let": {
        "people_id": "$_id"
      },
      "pipeline": [
        {
          "$match": {
            $expr: {
              "$in": [
                "$$people_id",
                "$actors.person_id"
              ]
            }
          }
        },
        {
          "$lookup": {
            "from": "studios",
            "localField": "_id",
            "foreignField": "movies",
            "as": "studio_docs"
          }
        }
      ],
      "as": "movie_docs"
    }
  }
])

mongoplayground


一样collection

db.collection.aggregate([
  {
    "$match": {
      "last_name": "Battson"
    }
  },
  {
    "$lookup": {
      "from": "collection",
      "localField": "_id",
      "foreignField": "actors.person_id",
      "as": "movie_docs"
    }
  }
])

mongoplayground