首页 > 解决方案 > 在mongoDB聚合中选择组后的所有字段

问题描述

我在 mongoDB 中有文档,例如:

{
    "_id": "myId",
    "firstName": "myFirstName",
    "lastName": "myLastName",
    "email": "my@email.com",
    "age": 88,
    "city": "myCity",
    "country": "myCountry"
}

然后,我有lookup,unwindgroup_id 在管道中。当我需要所有字段时,有没有办法不列出所有字段?

{
    $group: {
        "_id": "$_id",
        "someItemsFromLookup": { "$push": "$someItemsFromLookup" }
        "firstName": { "$first": "$firstName" },
        "lastName": { "$first": "$lastName" },
        "email": { "$first": "$email" },
        "age": { "$first": "$age" },
        "city": { "$first": "$city" },
        "country": { "$first": "$country" }
    }
}

我需要这样的东西,*“所有领域”在哪里:

{
    $group: {
        "_id": "$_id",
        "someItemsFromLookup": { "$push": "$someItemsFromLookup" }
        "*": { "$first": "*" },
    }
}

标签: mongodbmongodb-queryaggregation-framework

解决方案


您可以$$ROOT$first累加器一起使用,然后$replaceRoot与第一个字段一起使用以将其放在根位置。

{ "$group": {
  "_id": "$_id",
  "someItemsFromLookup": { "$push": "$someItemsFromLookup" },
  "first": { "$first": "$$ROOT" }
}},
{ "$replaceRoot": {
  "newRoot": {
    "$mergeObjects": [
      "$first",
      { "someItemsFromLookup": "$someItemsFromLookup" }
    ]
  }
}}

推荐阅读