如何在环回查询Mongo中得到汇总结果

我是新来的回环,需要解决以下问题。 我需要两个字段(电子邮件和名称两个)的mongo不同的结果。

数据:

var a = [{email:'x @ gmail.com',name:'x'},{email:'x @ gmail.com',name:'x'},{email:'x@gmail.com' ,名称:'z'}]

输出:

var a = [ { email: 'x@gmail.com',name: 'x'}, { email: 'x@gmail.com',name: 'z'} ] 

我如何在回送中使用下面的聚合函数来获得所需的输出结果。

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

(来源如何有效地执行与多个键“不同” ) ?

使用额外的$group$project阶段来投影所需的输出,

  • 通过emailname Group ,获得每个独特组合的单个logging。
  • 再次将所有logginggroup在一起,并使用$push操作符累积前一阶段中获得的_id
  • Project records字段并排除_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" : "x@gmail.com", "name" : "z" }, { "email" : "x@gmail.com", "name" : "x" } ] } 

这个答案有点晚了,但是我希望对别人来说,这可能是有价值的。 要访问回送中的mongo聚集function,您必须绕过抽象,因此您的代码不再是数据库不可知的,牢记这一点,就好像您切换数据库,您将不得不改变这个代码。 在回送中你可以写下面的代码:

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

您可以使用此方法访问任何不存在于回送中的数据库操作。 我还没有testing聚合方法,但成功地将它用于findAndModify()和distinct() – 所以毫无疑问,它将在聚合或mongoDb文档中的任何其他工作。