当前位置: 首页 > 面试题库 >

查找用户在mongoDB中花费的总时间

戚奇略
2023-03-14
问题内容

我有一个mongodb,其结构如下:

|User |Location  |TimeOfVisit
|U1.  |Cafeteria.|ISODate("2018-12-27T09:09:08.688Z")
|U2.  |Reception.|ISODate("2018-12-27T09:12:45.688Z")
|U1.  |Cafeteria.|ISODate("2018-12-27T09:45:38.688Z")
|U1.  |Cafeteria.|ISODate("2018-12-27T09:47:38.688Z")

我需要找到用户在任何特定位置所花费的总时间。我已阅读多个博客,但尚未找到任何具体答案。我有以下几点:

aggregate([
        {
            "$match": {
                "User": {
                    "$eq": req.query.User
                }
            }
        },
        {
            "$group": {
                "_id": "$location",
                "totalMiniutes": {
                    <<Get the time>>
                }
            }
        }

问题答案:

您可以timeOfDayTimeOfVisit字段中找到,然后使用
$sum

来获取总数

db.collection.aggregate([
  { "$match": { "User": req.query.User }},
  { "$addFields": {
    "timeOfDay": {
      "$mod": [
        { "$toLong": "$TimeOfVisit" },
        1000*60*60*24
      ]
    }
  }},
  { "$group": {
    "_id": "$location",
    "totalTimeInMilliseconds": { "$sum": "$timeOfDay" }
  }}
])

Output

[
  {
    "_id": "Reception",
    "totalTimeInMilliseconds": 33165688
  },
  {
    "_id": "Cafeteria",
    "totalTimeInMilliseconds": 98846064
  }
]

您可以将其进一步划分以获取天,小时,分钟或秒

1 hour = 60 minutes = 60 × 60 seconds = 3600 seconds = 3600 × 1000 milliseconds = 3,600,000 ms.

db.collection.aggregate([
  { "$addFields": {
    "timeOfDay": {
      "$mod": [
        { "$subtract": [ "$TimeOfVisit", Date(0) ] },
        1000 * 60 * 60 * 24
      ]
    }
  }},
  { "$group": {
    "_id": "$location",
    "totalTimeInMiniutes": {
      "$sum": { "$divide": ["$timeOfDay", 60 × 1000] }
    }
  }}
])

对于mongodb 4.0 及更高版本

db.collection.aggregate([
  { "$addFields": {
    "timeOfDay": {
      "$mod": [
        { "$toLong": "$TimeOfVisit" },
        1000 * 60 * 60 * 24
      ]
    }
  }},
  { "$group": {
    "_id": "$location",
    "totalTimeInMiniutes": {
      "$sum": { "$divide": ["$timeOfDay", 60 × 1000] }
    }
  }}
])


 类似资料:
  • 我收集了300万份文件,索引如下: {ts:1},{u\u id:1} 请注意,这是两个单独的升序索引,而不是复合索引。 当我运行此查询时: db.collection.find({u_id:'user'})。排序({ts:-1})。跳过(0)。限制(1) 需要100毫秒。我有以下日志: 2017-04-15T06:42:01.147 0000 I命令[conn783]查询。集合查询:{order

  • 问题内容: 我处在某种情况下,我需要找出在办公室进行一些内部申请所花费的总时间。 我有这样的示例数据: 这里的状态有不同的含义: 1开始2暂停3恢复4结束 表示员工在状态为1时在ScanDateTime开始工作。他们可以休息一下(状态2),然后返回并继续他们的工作(状态3),状态为4表示他们正在结束工作。注意:工作时间可能会有多个休息时间。 预期产量: 我试图按照一些示例来计算预期的结果集,但无济

  • 问题内容: SQL: 用户索引: 个人资料索引 解释 : 上面的查询大约需要0.1221 我怎样才能使其运行更快? 问题答案: 我删除了此查询,因此搜索完成后不会显示总结果数。 似乎是临时解决方案,甚至是永久解决方案。

  • 问题内容: 假设我正在测试Java服务器应用程序。我知道需要多少时间才能完成测试。现在,我想知道该测试期间在GC上花费了多少。我该怎么做? 问题答案: 最简单的方法是在启动JVM时使用和选项。我认为它可以打印出垃圾收集需要多长时间。 http://www.oracle.com/technetwork/java/javase/tech/vmoptions- jsp-140102.html

  • 由于我意识到不能比较字符串格式的($gt、$gte、$lt、$lte等)日期,所以我尝试学习如何使用UTCDateTime。我无法在带有mongoDb\bson\utcdateTime的集合中找到日期 我在试着用这个代码。 据我所知,我也可以找到带有时间戳的日期,但我正在寻找带有UTCDateTime字段的搜索。

  • 本文向大家介绍查找信号到达字符串中所有位置所花费的时间-C ++,包括了查找信号到达字符串中所有位置所花费的时间-C ++的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序来计算信号到达字符串中所有位置所花费的时间。让我用一个例子来解释它。 我们将有一个仅包含s和p字符的字符串。s是信号,p是字符串中的位置。信号从s开始,沿左右两个方向传播。我们假设要花费一个单位时间才能到达