【问题标题】:Return a collection of objects with the same date (MongoDB/Mongoose)返回具有相同日期的对象集合(MongoDB/Mongoose)
【发布时间】:2020-07-04 15:53:19
【问题描述】:

给定一个看起来像这样的集合

{ "uuid" : "32645503-0d51-4fc6-8e4a-28b03714db5e", "date" : "1593701241361" }
{ "uuid" : "63022d8b-e16e-4387-b5c0-74d09a95fb72", "date" : "1593787041640" }

其中date 是数字格式的日期,查询在同一天获取所有文档会是什么样子?它应该非常快速/高效,因为我的收藏有超过 100 000 个文档。

【问题讨论】:

  • 同一天还是同一天?
  • 如前所述
  • 请查看我的回答

标签: node.js database mongodb mongoose mongodb-query


【解决方案1】:

您可以使用$toDate$dateToString mongodb 运算符来实现您想要的。

这是查找所有重复项的查询:

collection.aggregate([{
  // This stage converts dateNumber to dateObject
  $addFields: {
    dateString: { $toDate: "$date" }
  }
}, {
  // This stage converts dateObject to date day
  $addFields: {
    day: { $dateToString: { format: "%Y-%m-%d", date: "$dateString" } }
  }
}, {
  // This stage groups all the records with same day
  $group: {
    _id: { day: "$day" },
    uniqueRecords: { $addToSet: "$_uuid" },
    count: { $sum: 1 }
  }
}, {
  // This stage finds groups which have more than 1 record. (Which means duplication)
  $match: {
    count: { $gt: 1 }
  }
}])

【讨论】:

    【解决方案2】:

    您可以使用moment 将它们转换为日期格式。

    let epoch = 1593787041640;
    let result = moment(epoch).format('DD/MM/YY');
    

    然后就可以迭代比较两个字符串了。

    并获得匹配的数据作为回报。

    【讨论】:

    • 是的,这就是我现在使用的。但是对于大量文档来说,速度还不够快。我正在寻找一个查询命令或一个 db.aggregate 来更快地完成它。而且我不想查询所有文档,而只想查询当天的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2020-05-18
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多