假设我有一组文档,如下所示:
{
"itemName":"Burger",
"userId":"25286",
"location":{
"locationTitle":"Burger king,Delhi"
}
}
{
"itemName":"Burger",
"userId":"25287",
"location":{
"locationTitle":"Burger king,Delhi"
}
}
我必须在两个用户之间找到共同的项目。如果字段 itemName 或 locationTitle 之一具有相同的字段值,则项目将很常见。但是一个用户可以拥有多个具有相同名称的项目。
谢谢
答案 0 :(得分:2)
您可以使用聚合将公共项目组合在一起。如果它们具有相同的itemName或locationTitle,则下面的两个查询分组条目,并将userIds添加到users数组。因此,users数组不包含重复项,考虑到如果同一条目出现多次则不应添加userId的要求。
db.items.aggregate({
$group: {
_id: "$itemName",
users: {
$addToSet: "$userId"
},
count: {
$sum: 1
}
}
});
db.items.aggregate({
$group: {
_id: "$location.locationTitle",
users: {
$addToSet: "$userId"
},
count: {
$sum: 1
}
}
});