=================编辑简单的问题陈述开始================ < / p>
db.t2.insert({_id:1,account:"abc",vendor:"amazon"});
db.t2.insert({_id:2,account:"abc",vendor:"overstock"});
db.t2.insert({_id:3,account:"abc",vendor:"overstock"});
现在您必须按帐户查找唯一供应商组的数量。 这里将显示答案是
{ "_id" : "abc", "number" : 2 }
可能的解决方案
db.t2.aggregate(
{ $group : { _id : { "z" : "$z", "v" : "$v" }} },
{ $group : { _id : "$_id.z", number : { $sum : 1 } } }
);
或者只是添加设置然后计算它但是假设你有数百万条记录,那么如何有效地像sql语句你可以实现相同的效果?
select count(distinct(vendor)) from t group by account
===================问题陈述结束====================== ==
所以我喜欢跟随......
db.t.insert({_id:1,v:"xyz",z:1});
db.t.insert({_id:3,v:"123",z:1});
db.t.insert({_id:5,v:"xyz",z:1});
现在我想执行以下查询
select count(distinct(v)) from t group by z;
因此预期的结果是z = 1,不同的值是xyz&amp; 123
{ "_id" : 1, "number" : 2 }
我可以执行以下操作并获得上述结果。
db.t.aggregate(
{ $group : { _id : { "z" : "$z", "v" : "$v" } } },
{ $group : { _id : "$_id.z", number : { $sum : 1 } } }
);
但我不想两次执行$ group。因为假设我有更大的集合,那么首先它将进行分组,并且无论中间结果将被存储在内存中,直到第二组应用。这正是我想要避免的。