如何使用聚合在MongoDB中编写以下查询?

如何使用聚合在MongoDB中编写以下查询?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,与住在“西班牙”的演员一起检索电影 检索具有演员详细信息的电影 藏品包括: db.actor.insert([{ "actorId" : "5", "firstName" : "Ritik", "lastName" : "Roshan", "address" : { "street" : "

与住在“西班牙”的演员一起检索电影

检索具有演员详细信息的电影

藏品包括:

db.actor.insert([{    "actorId" : "5",    "firstName" : "Ritik",    "lastName" : "Roshan",    "address" : {        "street" : "GM Road",        "city" : "Guwahati",        "state" : "Aasam",    "country" : "India",        "pincode" : "145145"    },    "contactDetails" : {        "email" : "Ritik.roshan@gmail.com",        "phoneno" : "9874584"     },    "age" : "52" }])

您可以使用
$lookup
加入两个集合

db.film.aggregate([
  { $match: { "releaseDetails.place": "Rajasthan" } },
  {
    "$lookup": {
      "from": "actor",
      "let": {
        actor: "$actor"
      },
      "pipeline": [
        {
          $match: {
            $expr: {
              $and: [
                { $in: [ "$firstName", "$$actor.firstName" ] },
                { $in: [ "$lastName", "$$actor.lastName" ] }
              ]
            }
          }
        }
      ],
      "as": "joinActors"
    }
  }
])
工作

注意:您正在保存
firstname
lastname
作为电影收藏中的参考。但是
firstname
lastname
的组合并不总是唯一的,最好将
演员的
\u id
保存到电影收藏的演员部分。
类似这样的回答对你有帮助吗?
db.film.aggregate([
  { $match: { "releaseDetails.place": "Rajasthan" } },
  {
    "$lookup": {
      "from": "actor",
      "let": {
        actor: "$actor"
      },
      "pipeline": [
        {
          $match: {
            $expr: {
              $and: [
                { $in: [ "$firstName", "$$actor.firstName" ] },
                { $in: [ "$lastName", "$$actor.lastName" ] }
              ]
            }
          }
        }
      ],
      "as": "joinActors"
    }
  }
])