如何解决Mongo 查询:比较多个相同字段时间戳以仅显示具有几秒差异的文档
我正在为此旋转轮子。我需要在集合中找到具有 3 秒或更短差异的时间戳(“createdTs”)的所有文档(要清楚:月/日/时间/年都一样,保存那几秒钟)。 createdTs 字段示例(类型为日期):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 秒 createdTs 差异的文档,并将它们分组/显示。
这可能吗?对 Mongo 比较新,现在我在这上面转动了两天。任何建议将不胜感激,谢谢!
我在另一个 post 上看到了这个,但不确定如何使用它,因为我想比较相同的字段:
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" },total:
{ $add: ["$year","$month"] }
}
}
])
但这总共返回空值。不确定是不是因为 $year 和 $month 不同?类型都是 int32,所以我认为这可行。想知道是否有办法比较所有字段是否为 0,然后在使用 $group 时如果秒不是/差异是 $gte 3,可以从那里开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。