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



所以我想统计24小时内有多少IP地址访问我们的数据,我们已经用时间戳存储了IP地址。但是我还没有弄清楚如何在Mongodb中查询IP地址。这样,我就可以在IP地址上次访问我们的服务器后24小时内对它们进行分组。

例如:

假设IP地址1.1.1.1访问我们位于01-01-2022T00:00的站点,但也访问了它02-01-2022T01:00

这将是两份文件,但我们需要排除第二份,因为它在24小时内。

但如果有人在周三晚上11:30访问,然后在周四凌晨1点访问,也应该是这样。它仍然需要被视为一个24小时的周期。

样本文件

/** 
* 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'
}
}
}]

尝试$setWindowFields运算符。就像这个一样。

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

对于我使用的-/+12小时的间隔,您可以根据需要进行自定义。目前尚不清楚24小时间隔的确切时间。

最新更新