微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mongo 查询:比较多个相同字段时间戳以仅显示具有几秒差异的文档

如何解决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 举报,一经查实,本站将立刻删除。