mongodb 在24小时内查询IP地址(如果相同则不查询)

uklbhaso  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(142)

所以我想统计24小时内有多少IP地址访问我们的数据,我们已经用时间戳存储了IP地址。但是我还没有弄清楚如何在Mongodb中查询IP地址。这样我就可以按IP地址最后一次访问我们服务器的24小时对它们进行分组。
例如:
假设IP地址1.1.1.1访问我们的站点01-01-2022T00:00,但也访问了它02-01-2022T01:00
这将是2个文档,但我们需要排除第二个文档,因为它在24小时内。
但是,如果有人在周三晚上11:30访问,然后在周四凌晨1点访问,也应该是这样。
示例文档

/**

* Paste one or more documents here
* /

{
  "ipaddress": "1.1.1.1",
  "accessDate": {
    "$date": {
      "$numberLong": "1666931400000"
    }
  },
  "accessFileId":{
    "$oid": "6274a3a881cf417136a8a4ed"
  }
}

我试着在我们的真实的生活数据中使用下面的答案,它并没有正确地将它们分组。

[{
 $setWindowFields: {
  partitionBy: '$UUID',
  sortBy: {
   timestamp: 1
  },
  output: {
   accessCount: {
    $count: {},
    window: {
     range: [
      -12,
      12
     ],
     unit: 'hour'
    }
   }
  }
 }
}, {
 $project: {
  UUID: 1,
  location:1,
  timestamp: 1
 }
}, {
 $group: {
  _id: {
   id: '$accessCount'
  }
 }
}]
9udxz4iz

9udxz4iz1#

尝试$setWindowFields运算符。将像下面这样。

db.collection.aggregate([
{
   $setWindowFields: {
      partitionBy: "$ipaddress",
      sortBy: { accessDate: 1 },
      output: {
         accessCount: {
            $count: {},
            window: { range: [ -12, 12 ], unit: "hour" }
         }
      }
   }
}
]

对于我使用的-/+ 12小时的间隔,您可以根据您的需要进行定制,目前还不清楚24小时间隔可能在哪个确切时间开始。

相关问题