2015-01-03 149 views
2

我是新來的迴環,需要修復以下問題。我需要兩個字段(電子郵件和名稱兩者)的mongo截然不同的結果。如何在環回查詢Mongo中獲取聚合結果

數據:

VAR一個= [{電子郵件: '×@ gmail.com',名稱: 'X'},{電子郵件: '×@ gmail.com',名稱:「× 「},{電子郵件: 'X @ gmail.com',名稱: 'Z'}]

輸出:

var a = [ 
{ email: '[email protected]',name: 'x'}, 
{ email: '[email protected]',name: 'z'} 
] 

我怎麼能使用以下聚合函數在環回,從而獲得所需的輸出結果。

collection = db.tb; 
result = collection.aggregate( 
      [ 
       {"$group": { "_id": { email: "$email", name: "$name" } } } 
      ] 
     ); 

(來源How to efficiently perform "distinct" with multiple keys?

回答

3

使用額外$group$project階段項目所需的輸出,

  • Group通過emailname,以獲得每個獨特 單個記錄組合。
  • 再次group彙總所有記錄並累積_id 使用$push運算符在前一階段中獲得。
  • Projectrecords字段並排除_id字段。

代碼:

result = collection.aggregate( 
     [ 
      {$group:{"_id":{"email": "$email","name": "$name" }}}, 
      {$group:{"_id":null,"records":{$push:"$_id"}}}, 
      {$project:{"_id":0,"records":1}}, 
     ] 
    ); 

O/P:

{ 
     "records" : [ 
       { 
         "email" : "[email protected]", 
         "name" : "z" 
       }, 
       { 
         "email" : "[email protected]", 
         "name" : "x" 
       } 
     ] 
} 
+0

「我怎麼能使用下面的代碼....」這是你在這裏發佈的「回送代碼」。它看起來不像。我認爲社區中的大多數人會更願意回答他們問題的「專家」在他們提出的問題中真正成爲某些知識的「專家」。 –

+1

完全Neil.I需要Loopback代碼來實現這一點。 –

+1

@ Vaibhav-我只是想給出它如何完成的想法。只是認爲這可以由郵件所有者用來了解如何完成工作。你總是可以不接受這個答案,並且可以等待專家來回答它,或者嘗試轉換'loopback'的語法。我可以建議你一個出發點 - http://docs.strongloop。com/display/public/LB/MongoDB +連接器#MongoDBconnector-Querywithlogicaloperators(sincev1.2.3),https://github.com/strongloop/loopback/issues/890。 – BatScream

2

這個答案是晚了一點,但我希望它可以是有價值的別人絆倒在此。要在回送中訪問mongo聚集功能,您必須繞過抽象,因此您的代碼不再是數據庫不可知的,請牢記這一點,就像您切換數據庫一樣,您必須更改此代碼。在環回你會寫下面的代碼:

var connector = app.dataSources.yourMongoConnector.connector 

result = connector.collection("yourCollection").aggregate([ 
      {"$group": { "_id": { email: "$email", name: "$name" } } } 
     ]) 

您可以使用此方法來訪問任何數據庫操作的環回不存在。我還沒有測試過聚合方法,但已經成功地將它用於findAndModify()和distinct() - 所以毫無疑問,它可以用於聚合或mongoDb文檔中的其他任何內容。

相關問題