2016-02-27 52 views
0

我得到了嵌套的結構與聚集後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" 
} 

回答

0

嘗試$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://stackoverflow.com/questions/20497499/mongodb-project-retain-previous-pipeline-fields?answertab=oldest#tab-top – zangw

相關問題