0

假设我有这两个集合:

// Members:
{
    "_id":{
        "$oid":"60dca71f0394f430c8ca296d"
    },
    "church":"60dbb265a75a610d90b45c6b",
    "name":"Julio Verne Cerqueira"
},
{
    "_id":{
        "$oid":"60dca71f0394f430c8ca29a8"
    },
    "nome":"Ryan Steel Oliveira",
    "church":"60dbb265a75a610d90b45c6c"
}

// Churches
{
    "_id": {
        "$oid": "60dbb265a75a610d90b45c6c"
    },
    "name": "Saint Antoine Hill",
    "active": true
},
{
    "_id": {
        "$oid": "60dbb265a75a610d90b45c6b"
    },
    "name": "Jackeline Hill",
    "active": true
}

我想查询它并得到这样的结果:

// Member with Church names
{
    "_id":{
        "$oid":"60dca71f0394f430c8ca296d"
    },
    "church":"Jackeline Hill",
    "name":"Julio Verne Cerqueira"
},
{
    "_id":{
        "$oid":"60dca71f0394f430c8ca29a8"
    },
    "church":"Saint Antoine Hill",
    "nome":"Ryan Steel Oliveira"
}

如果我尝试查找,我有以下结果:(它正在获取整个教堂集合)。 在此处输入图像描述

我将如何进行查询,所以它只给了我与该成员相关的一个教会?

并且,如果可能的话,如何按教堂的字母顺序然后按名称对结果进行排序?

观察: MongoDB 版本:4.4.10

4

1 回答 1

1

$lookup--> $pipeline-->中存在匹配错误$match

它应该是:

$match: {
  $expr: {
    $eq: [
      "$_id",
      "$$searchId"
    ]
  }
}

从提供的文件中,members关系churchies将是1 到 many。因此,当您加入membersviachurchies$lookup,输出church将是一个只有一个churchiesdocument的数组。


聚合管道:

  1. $lookup-将members集合 (by $$searchId) 与churchies(by _id) 连接起来。
  2. $unwindchurch-将数组字段解构为多个文档。
  3. $project- 装饰输出文件。
  4. $sort- 排序churchname升序。
db.members.aggregate([
  {
    "$lookup": {
      "from": "churchies",
      "let": {
        searchId: {
          "$toObjectId": "$church"
        }
      },
      "pipeline": [
        {
          $match: {
            $expr: {
              $eq: [
                "$_id",
                "$$searchId"
              ]
            }
          }
        },
        {
          $project: {
            name: 1
          }
        }
      ],
      "as": "church"
    }
  },
  {
    "$unwind": "$church"
  },
  {
    $project: {
      _id: 1,
      church: "$church.name",
      name: 1
    }
  },
  {
    "$sort": {
      "church": 1,
      "name": 1
    }
  }
])

示例 Mongo Playground

于 2021-11-16T00:48:00.827 回答