对于 SQL 中的这个查询(查找重复项):
SELECT userId, name FROM col GROUP BY userId, name HAVING COUNT(*)>1
我在 MongoDB 中执行了这个简单的查询:
res = db.col.group({key:{userId:true,name:true},
reduce: function(obj,prev) {prev.count++;},
initial: {count:0}})
我添加了一个简单的 Javascript 循环来遍历结果集,并执行过滤器来查找其中计数 > 1 的所有字段,如下所示:
for (i in res) {if (res[i].count>1) printjson(res[i])};
除了在客户端使用 javascript 代码之外,还有更好的方法吗?
如果这是最好/最简单的方法,请说它是,这个问题将对某人有所帮助:)
使用 Mongo 聚合框架的新答案
在提出并回答这个问题后,10gen 发布了带有聚合框架的 Mongodb 2.2 版本。执行此查询的新最佳方法是:
db.col.aggregate( [
{ $group: { _id: { userId: "$userId", name: "$name" },
count: { $sum: 1 } } },
{ $match: { count: { $gt: 1 } } },
{ $project: { _id: 0,
userId: "$_id.userId",
name: "$_id.name",
count: 1}}
] )
10gen有一个方便的SQL 到 Mongo 聚合转换表 http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/值得添加书签。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)