MongoDB - 具有聚合的项目数组子字段

Qua*_*tum 4 mongodb aggregation-framework

有这个基本文件:

{
  "_id": "userID",
  "name": "User Name",
  "profiles": [
    {
      "level": 1,
      "bar": {
        "_id": "bar1ID",
        "name": "Bar Name"
      }
    },
    {
      "level": 1,
      "bar": {
        "_id": "bar2ID",
        "name": "Bar 2 Name"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我需要删除一些字段,并重新分配bar字段,以便它只包含_id:

{
  "_id": "userID",
  "profiles": [
    {
      "level": 1,
      "bar": "bar1ID"
    },
    {
      "level": 1,
      "bar": "bar2ID"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

与UserID匹配,并使用mongo聚合框架

sty*_*ane 6

使用.aggregate()方法.

管道中唯一的阶段是$project您使用$map运营商的阶段.

db.collection.aggregate([
    { "$project": { 
        "profiles": { 
            "$map": { 
                "input": "$profiles", 
                "as": "profile", 
                "in": { 
                    "level": "$$profile.level",
                    "bar": "$$profile.bar._id" 
                } 
            } 
        } 
    } }
])
Run Code Online (Sandbox Code Playgroud)

哪个回报:

{
        "_id" : "userID",
        "profiles" : [
                {
                        "level" : 1,
                        "bar" : "bar1ID"
                },
                {
                        "level" : 1,
                        "bar" : "bar2ID"
                }
        ]
}
Run Code Online (Sandbox Code Playgroud)