2014-10-18 22 views
2

我有一個MongoDB中收集這樣

{ 
    taskType:1, 
    client:{name:"Moe",...}, 
    ... 
}, 
{ 
    taskType:1, 
    client:{name:"Larry",...}, 
    ... 
}, 
{ 
    taskType:1, 
    client:{name:"Curly",...}, 
    ... 
} 

我可以在其上

{$project:{_id:0, client:"$client"}} 

,我得到運行下面的$項目查詢這樣的結果:

[{ 
    client:{name:"Moe",...} 
}, 
{ 
    client:{name:"Larry",...} 
}, 
{ 
    client:{name:"Curly",...} 
}] 

,但實際上,我在尋找這樣一個結果:

[ 
{name:"Moe",...}, 
{name:"Larry",...}, 
{name:"Curly",...} 
] 

我該怎麼做(如果我可以的話)? 在此先感謝。

回答

1

使用$組作爲

db.c.aggregate([{$group: {_id:0, result:{$push:"$client"}}}]); 

或追加一個地圖你原來的答案:

db.c.aggregate([{$project:{_id:0, client:"$client"}}]).map(function(e) {return e.client;}); 
+0

我使用C#的驅動程序,只能請使用MapReduce的或Agregation,和它的MapReduce必須同時具有Map和Reduce功能。到目前爲止沒有運氣。 – 2014-10-18 14:45:38

+0

@Ivan Koshelew,您可以使用匯總** $組**,如上所示。它只返回一個文檔,並且**結果**包含您想要的內容。 – Wizard 2014-10-18 15:21:52

3

你可以把client.name場最多使用$project像頂級這個:

{$project: {_id: 0, name: "$client.name"}} 

MongoDB的3.4更新

現在,您可以用$replaceRoot階段做到這一點更是直接而不是使用$project

{$replaceRoot: {newRoot: '$client'}} 
+0

他們有更多的屬性,然後只是名稱,如「...」 – 2014-10-18 14:32:47

+0

@IvanKoshelew三年後,但你現在可以使用'$ replaceRoot'來處理,通過提升整個嵌入式客戶端對象如更新的答案中所示的根。 – JohnnyHK 2017-08-11 19:08:10