首页 > 解决方案 > 如何在一个字段上分组,同时忽略另一个字段的重复项?

问题描述

我有一些关于我网站访问者的数据,并且想弄清楚唯一访问者的数量,以及其他一些数据上的组。

样本数据:

{
    _id: 1,
    date: "some date",
    pageVisited: "pageName",
    ipAddr:  111.111.111.111
}

到目前为止我的管道:

db.collection.aggregate([
    {//Something here to remove any duplicates from ipAddr
    {$group: {
            _id: "$pageVisited",
            count: {$sum: 1}
        }}
])

因此,我想消除任何重复的 IP 地址,以便在某些人多次访问的情况下获得该站点的唯一访问者。任何访问者访问超过一页的可能性很小,所以我愿意忽略这个问题。如何删除查询中的重复项?

标签: mongodbmongodb-queryaggregation-framework

解决方案


对我来说最简单的方法是在组中使用$addToSet运算符首先获取一个setip,如下所示:

db.collection.aggregate([
  {
    $group: {
      _id: "$pageVisited",
      ids: {
        "$addToSet": "$ipAddr"
      }
    }
  },
  {
    $project: {
      _id: 1,
      count: {
        $size: "$ids"
      }
    }
  }
])

蒙戈游乐场


推荐阅读