假设我的ItemAvailability
名称的模型有product_id
,vendor_id
,shop_id
我想在product_id
上分组,并选择product_id
有{count =>} = 3的所有distinct(vendor_id)
。
使用MongoID这是可行的吗?
示例数据:
ItemAvailability
product_id vendor_id shop_id
1 1 1
1 1 2
1 1 3
2 2 1
2 2 2
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
在上述数据集中,结果应为1,因为它在所有供应商1,2和3中都可用。
其中2不应该是结果,因为它仅由供应商2提供。
如果需要更多细节,请告诉我?
答案 0 :(得分:5)
您可以使用aggregation framework
在MongoDB中执行group by
个查询。请查看docs
以获取介绍。它非常强大,您可以通过查看示例来了解它。
对于您所描述的方案,以下查询应该有所帮助:
db.ItemAvailability.aggregate(
[
// Group By product_id, vendor_id
{
"$group": { _id: { product_id: "$product_id", vendor_id: "$vendor_id" } }
},
// Group results from above step by product_id and get the count
{
"$group": { _id: "$_id.product_id", count: { "$sum": 1 } }
},
// Filter the records for count >= 3
{
"$match": { count: { "$gte": 3 } }
}
]
)