2017-01-02 71 views
1

我有這樣一些項目:獲取一個字段的值的數組MongoDB中

{ "name":"a", "value":10 } 
{ "name":"b", "value":20 } 
{ "name":"c", "value":10 } 
... 

我可以從查詢與db.collection.find({"value":10},{"name":1, _id: false})選擇名字。它給我以下幾點:

{ "name" : "a" } 
{ "name" : "c" } 
... 

但是,我希望它返回一個值的數組,而不是一組{key:value}對。 (如[ "a", "c", ... ])。有沒有辦法實現這一點,只有MongoDB查詢或我應該選擇並將它們放入我的應用程序中的數組?

電流輸出:

{ "name" : "a" } 
{ "name" : "c" } 
... 

預期輸出:

["a", "c", ...] 

如果上述是不是一個可能的輸出,它也可以是

{ "result": ["a", "c", ...] } 
+0

使用** [在$](https://docs.mongodb.com/manual/reference/operator/查詢/中/)** – Yogesh

+0

但如何?在哪裏把它放在這個查詢中? –

+0

它仍然令人困惑,你可以添加您的預期輸出 – Yogesh

回答

2
db.collection.distinct("name", { "value": 10 }) 

@ Sagar Reddy評論將返回組陣列

["a", "c"] 

這可能是你所需要的。 Aniway,類似的更復雜的查詢可以使用aggregation來實現,您可以在其中使用額外的聚合階段。

db.collection.aggregate([ 
    { $match: { value: 10 }}, 
    { $group: { _id: null, result: { $addToSet: '$name' }}}, 
    { $project: { _id: 0, result: 1 }} 
]) 

group階段,addToSet可以push如果你想相同的值出現多次更換。

addToSet使用輸出:

{ "result" : [ "c", "a" ] } 
使用 push

防爆輸出:

{ "result" : [ "a", "c", "c" ] } 
+0

此查詢的輸出結果爲「{」result「:[{」result「:[」c「,」b「]] }],「ok」:1}'。我怎樣才能讓它只是'{「結果」:[「c」,「b」]}'? –

+1

這是額外的聚合輸出信息,您將*始終*從驅動程序獲取該值,這是保存聚合結果的第一個「結果」鍵。保存數組的第二個'result'鍵是您在聚合階段定義的鍵。只需訪問字典中的關鍵字:'actualResult' ='aggregationResult ['result']' – sergiuz

+0

非常感謝。 –

相關問題