Mongodb:根据字段值

时间:2016-04-29 09:49:58

标签: mongodb aggregation-framework

假设我有一组文档,如下所示:

{
"itemName":"Burger",
"userId":"25286",
"location":{
       "locationTitle":"Burger king,Delhi"
   }
}

{
"itemName":"Burger",
"userId":"25287",
"location":{
       "locationTitle":"Burger king,Delhi"
  }
}

我必须在两个用户之间找到共同的项目。如果字段 itemName locationTitle 之一具有相同的字段值,则项目将很常见。但是一个用户可以拥有多个具有相同名称的项目。

谢谢

1 个答案:

答案 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
    }
  }
});