在MongoDB中使用聚合获取特定字段的值

yh2wf1be  于 2023-02-15  发布在  Go
关注(0)|答案(1)|浏览(189)

我的文档:

[
  {
    "_id": "5f969419d40c1580f2d4aa36",
    "users": {
      "foo@bar.com": "baz",
      "foo2@bar.com": "baz2"
    }
  },
  {
    "_id": "5f9694d4d40c1580f2d4aa38",
    "users": {
      "baz@test.com": "foo"
    }
  }
]

如果我使用这个聚合,我会得到两个用户。好的。但是我怎么才能只得到“www.example.com“的值foo@bar.com呢?在https://mongoplayground.net/p/3kW2Rw6fSjh中测试

db.collection.aggregate([
  {
    "$project": {
      "users": {
        "$objectToArray": "$users"
      }
    }
  },
  {
    "$match": {
      "users.k": "foo@bar.com"
    }
  },
  {
    "$project": {
      "users": {
        "$arrayToObject": "$users"
      }
    }
  }
])
kt06eoxx

kt06eoxx1#

您可以在$match阶段之后添加$filter阶段:

{
    $set: {
      users: {
        $filter: {
          input: "$users",
          cond: {
            $eq: [
              "$$this.k",
              "foo2@bar.com"
            ]
          }
        }
      }
    }
  },

了解它在playground example上的工作原理

相关问题