2017-04-21 174 views
4

我有這樣一個查詢(簡體):mongo的組聚合後,是否可以重命名_id字段?

db.report.aggregate([{ 
     $match: { 
      main_id: ObjectId("58f0f67f50c6af16709fd2c7") 
     } 
    }, { 
     $group: { 
      _id: "$name", 
      count: { 
       $sum: 1 
      }, 
      sum: { 
       $sum: { 
        $add: ["$P31", "$P32"] 
       } 
      } 
     } 
    } 
]) 

我從Java這個查詢,我要地圖它在我的課,但我不希望「_id」對'被映射名稱「字段。因爲如果我做這樣的事情:

@JsonProperty("_id") 
private String name; 

然後當我保存這個數據傳回蒙戈(一些修改後)的數據將保存名稱爲「_id」,而我想會產生真實身份。

所以,我怎麼能$組術後重命名「_id」?

+0

[$項目(https://docs.mongodb.com/manual/reference/operator/aggregation/project/)它在管道 –

回答

9

您可以通過在你的管道像這樣的結尾處添加一個$project階段實現這一目標:

{ $project: { 
     _id: 0, 
     name: "$_id", 
     count: 1, 
     sum: 1 
    } 
} 
+0

下一個階段你確定關於'name:「$ name」' - 在小組階段之後,不再有名字字段。可能需要的是'name:「$ _id」'? –

+0

@VinceBowdren哦,你的權利,我的壞。我已經更新了答案 – felix

1

從蒙戈V3.4,你可以在$project結合使用$addFields避免編寫所有$project可能是非常單調

這發生在$project因爲如果具體包括一個領域,其他領域將被自動排除。

例子:

{ 
    $addFields: { my_new_id_name: "$_id" } 
}, 
{ 
    $project: { _id: 0 } 
} 
相關問題