在mongodb文档中查找时间戳的最大值和最小值

问题描述 投票:0回答:2

我想找到“myUpdateTime”字段的最大值和最小值。它是一个时间戳,但存储为字符串。

"myUpdateTime": "2021-11-08T17:42:30.650Z",
mongodb mongodb-query aggregation-framework
2个回答
0
投票

建议您将时间戳值存储为

Timestamp
而不是
string
以提高性能,以防每次您需要将字段转换为时间戳时,例如这些场景:

  • 按时间戳排序
  • 按范围/比较过滤时间戳

要获得

myUpdateTime
的最小值/最大值,您必须使用
$group
运算符对所有文档进行分组。并通过先将
min
转换为
max
值来执行
myUpdateTime
Timestamp
值。

db.collection.aggregate([
  {
    $group: {
      _id: null,
      minUpdateTime: {
        $min: {
          $toDate: "$myUpdateTime"
        }
      },
      maxUpdateTime: {
        $max: {
          $toDate: "$myUpdateTime"
        }
      }
    }
  }
])

Demo @ Mongo Playground


-1
投票

要找到“myUpdateTime”字段的最大值和最小值,您可以将时间戳字符串转换为实际的 Date 对象,然后进行比较。

      // Example data
    const data = [
      { myUpdateTime: "2021-11-08T17:42:30.650Z" },
      { myUpdateTime: "2021-11-09T15:21:10.850Z" },
      { myUpdateTime: "2021-11-06T12:35:20.250Z" },
    ];

    // Convert timestamps to Date objects and extract their time value
    const times = data.map((item) => new Date(item.myUpdateTime).getTime());

    // Find the minimum and maximum time value
    const minTime = Math.min(...times);
    const maxTime = Math.max(...times);

    // Convert the time values back to Date objects
    const minDate = new Date(minTime);
    const maxDate = new Date(maxTime);

    // Format the dates as strings
    const minDateString = minDate.toISOString();
    const maxDateString = maxDate.toISOString();

    console.log(`Min: ${minDateString}`);
    console.log(`Max: ${maxDateString}`);
© www.soinside.com 2019 - 2024. All rights reserved.