首页 > 解决方案 > 我想在 MongoDB 中查找同一日期的信息

问题描述

我想查找同一日期的信息。我的数据是

[
  {
    "reservations": [],
    "_id": "5ff62f01d274650f5f187c00",
    "floorNumber": "floor 4",
    "sessionInDay": "morning",
    "start": "2021-01-10T00:00:00.000Z",
    "seatsAvailable": 15,
    "id": 1,
    "__v": 0
  },
  {
    "reservations": [],
    "_id": "5ff6346be9a69310deeeabc2",
    "floorNumber": "floor 4",
    "sessionInDay": "morning",
    "start": "2021-01-05T00:00:00.000Z",
    "seatsAvailable": 15,
    "id": 2,
    "__v": 0
  },
  {
    "reservations": [],
    "_id": "5ff6346be9a69310deeeabc2",
    "floorNumber": "floor 4",
    "sessionInDay": "afternoon",
    "start": "2021-01-05T00:00:00.000Z",
    "seatsAvailable": 15,
    "id": 3,
    "__v": 0
  }
]

我想合并具有相同开始日期的数据。以什么形式出来?如何查询?我要输出的数据格式:

[
  {
    "start": "2021-01-10T00:00:00.000Z",
    "details": [
      {
        "reservations": [],
        "_id": "5ff62f01d274650f5f187c00",
        "floorNumber": "floor 4",
        "sessionInDay": "morning",
        "start": "2021-01-10T00:00:00.000Z",
        "seatsAvailable": 15,
        "id": 1
      }
    ]
  },
  {
    "start": "2021-01-05T00:00:00.000Z",
    "details": [
      {
        "reservations": [],
        "_id": "5ff6346be9a69310fad23413",
        "floorNumber": "floor 4",
        "sessionInDay": "morning",
        "start": "2021-01-05T00:00:00.000Z",
        "seatsAvailable": 15,
        "id": 2
      },
      {
        "reservations": [],
        "_id": "5ff6346be9a69310deeeabc2",
        "floorNumber": "floor 4",
        "sessionInDay": "afternoon",
        "start": "2021-01-05T00:00:00.000Z",
        "seatsAvailable": 15,
        "id": 3
      }
    ]
  }
]

最后一个问题,这一步。我应该像这样格式化数据,将其保存到数据库中,还是应该使用查询方法?

谢谢帮助我。

标签: mongodbmongooseaggregation-framework

解决方案


  1. 查找同一日期的所有文档(例如 2021-01-10 ):
db.reservations.find({start:/^2021-01-10/})
  1. 合并相同开始日期的数据:
db.reservations.aggregate([ 
  {$project:{date:{$substr:["$start",0,10]}, floorNumber:1,sessionDay:1,start:1,seatsAvailable:1 , id:1,"__v":1 ,_id:0 }} ,
  {$group:{_id:"$date" , details:{$push:"$$ROOT"}   }} , 
  {$project:{date:"$_id", _id:0 ,details:1} } 
])
  1. 关于是否需要像聚合结果那样格式化数据的问题,这在很大程度上取决于您如何使用数据,在 mongodb 中最好的是尽可能地进行非规范化,并以自然的方式将数据放在一起。被显示,所以如果在 90% 的时间里,您将按日期查询并在大多数时间显示每天的所有预订,那么在聚合结果中进行修改可能会更好......

推荐阅读