我在这上面旋转我的轮子。我需要在一个集合中找到所有文档,这些文档的时间戳(“createdTs”)相差 3 秒或更短(要清楚:月/日/时间/年都一样,保存那几秒钟)。createdTs 字段示例(类型为 Date):2021-04-26T20:39:01.851Z
db.getCollection("CollectionName").aggregate([
{ $match: { memberId: ObjectId("1234") } },
{
$project:
{
year: { $year: "$createdTs" },
month: { $month: "$createdTs" },
day: { $dayOfMonth: "$createdTs" },
hour: { $hour: "$createdTs" },
minutes: { $minute: "$createdTs" },
seconds: { $second: "$createdTs" },
milliseconds: { $millisecond: "$createdTs" },
dayOfYear: { $dayOfYear: "$createdTs" },
dayOfWeek: { $dayOfWeek: "$createdTs" },
week: { $week: "$createdTs" }
}
}
])
我尝试了很多不同的变化。我苦苦挣扎的地方是如何将这些发现相互比较。我还希望只搜索整个集合而不匹配“memberId”字段,只收集所有创建时间差异小于 3 秒的文档,然后对它们进行分组/显示。
这可能吗?Mongo 的新人,现在在这上面旋转了两天。任何建议将不胜感激,谢谢!
我在另一篇文章中看到了这个,但不确定如何使用它,因为我想比较同一个字段:
db.collection.aggregate([
{ "$project": {
"difference": {
"$divide": [
{ "$subtract": ["$logoutTime", "$loginTime"] },
60 * 1000 * 60
]
}
}},
{ "$group": {
"_id": "$studentID",
"totalDifference": { "$sum": "$difference" }
}},
{ "$match": { "totalDifference": { "$gte": 20 }}}
])
也在尝试...
db.getCollection("CollectionName").aggregate([
{ $match: { memberId: ObjectId("1234") } },
{
$project:
{
year: { $year: "$createdTs" },
month: { $month: "$createdTs" },
total:
{ $add: ["$year", "$month"] }
}
}
])
但这总共返回 null。不确定是不是因为 $year 和 $month 不同?类型都是 int32,所以我认为这可行。想知道是否有一种方法可以比较所有字段是否为 0,那么如果使用 $group 时秒数不是/差异为 $gte 3,则可以从那里开始。