假设我有一个包含 -
等文档的集合{
'name': 'Hawaiian',
'toppings': ['ham', 'cheese', 'pineapple'],
}
或者 -
{
'name': 'Peperonni',
'toppings': ['cheese', 'pepperoni'],
}
如何获取出现在多个文档中的所有topping
的列表?因此,对于上面的两个文档,它是cheese
。
理想情况下尽可能“接近”数据库 - 我知道我可以获得distinct
所有配件的列表,然后在应用程序级别遍历所有文档,但这太贵了。 / p>
谢谢!
答案 0 :(得分:5)
虽然查询很长,但你可以看看。 这是mongodb 2.2的聚合框架
db.test2.aggregate({$project:{"toppings":1, "_id":0}}, {$unwind:"$toppings"}, {$group:{"_id":"$toppings", count:{$sum:1}}}, {$match:{count:{$gt:1}}}, {$project:{"_id":1}})
{ "result" : [ { "_id" : "cheese" } ], "ok" : 1 }
解释我的查询步骤:
toppings
字段toppings
toppings
中的值分组并计算数字count
。答案 1 :(得分:1)
我会得到所有配料的清单,然后检查
db.coll.find({"topping": topping}).count() > 1
请注意,我在mongo shell中尝试了这个,虽然pymongo语法完全相同,但我不确定计数的实现位置 - 在pymongo或数据库中。
[编辑]
pymongo似乎将count()委托给mongodb,因此计数操作不是完整查询,而是由数据库执行。