我怎么能修改返回的记录格式

问题描述:

我得到了嵌套的结构与聚集后profile场,我怎么能修改返回的记录格式

我想拉平剖面结构,只保留名称字段。

我怎么能这样做在聚合。加入聚集

{"_id"=>BSON::ObjectId('566d93bb5e428410e5a3354c'), 
    "author_id"=>113536670874, 
    ... 
    "created_time"=>"2015-11-27T09:17:07+0000", 
    "profile"=>{"_id"=>BSON::ObjectId('566d93695e428410e5a33224'), "name"=>"DJ"}} 

预期格式

{"_id"=>BSON::ObjectId('566d93bb5e428410e5a3354c'), 
    "author_id"=>113536670874, 
    ... 
    "created_time"=>"2015-11-27T09:17:07+0000", 
    "name"=>"DJ" 
} 

尝试$project做到这一点后

我的聚集查询与此类似

db.hitting_stats.aggregate(
    [ 
     {$lookup: { 
      from: 'players', 
      localField: 'name', 
      foreignField: 'name', 
      as: 'profile' 
     } 
     } 
    ] 
); 

记录格式,添加它之后$lookup

{$lookup: { 
      from: 'players', 
      localField: 'name', 
      foreignField: 'name', 
      as: 'profile' 
     } 
     }, 
{$project: { 
      _id: '$_id', 
      author_id: 1, 
      created_time: 1, 
      name: '$profile.name' 
     } 
     } 

正如黑人在评论中指出,输出$loopup为“阵”,更精确地

"name": { 
    "$arrayElemAt": [ 
       { "$map": { 
        "input": "$profile", 
        "as": "el", 
        "in": "$$el.name" 
        }},0] 
     } 
+0

你好谢谢,这个解决方案肯定能行。然而,hitting_stats集合中有10多个字段,这些字段是可变的。有没有其他选择避免指定投影操作中的所有字段? – newBike

+0

@newBike,['$$ ROOT'](https://docs.mongodb.org/manual/reference/aggregation-variables/)可以满足您的要求。 – zangw

+0

@newBike,这里是一个相关的问题,http://*.com/questions/20497499/mongodb-project-retain-previous-pipeline-fields?answertab=oldest#tab-top – zangw