猫鼬查询,其中一个日期字段大于另一个日期字段

我正在尝试构造一个查询,该查询将返回日期字段大于另一个日期字段的对象,但是我似乎无法使其正常工作。

我的猫鼬Appointments模式:

const AppointmentSchema = new mongoose.Schema({
  createdAt: {
    type: Date,default: Date.now
  },expirationDate: {
    type: Date,nextReminderAt: {
    type: Date,}
});

Appointments数据:

[
  {
    "_id": "5d725a4a7b292f5f8ceff789","expirationDate": "2019-12-17 23:59","nextReminderAt": "2019-11-17 23:59"
  },{
    "_id": "5d725c84c4ded7bcb480eaa0",{
    "_id": "5d725cb9c4ded7bcb480eaa1","nextReminderAt": "2020-11-17 23:59"
  },{
    "_id": "5d725cd2c4ded7bcb480eaa2",}
]

我的查询:

const appointments = await Appointment.find({ $expr: { $gt: [ "$expirationDate","$nextReminderAt" ] } });

这在某种程度上有效,这意味着它将按照我想要的去做,但是如果nextReminderAt未定义,它仍将被视为有效的比较,但是我仍然认为有一种更好/更简单的方法来编写查询做我想做的。 我可以进行特定类型的比较吗?与=====一样?

我是猫鼬/ mongo的新手,但仍然不知道编写它的正确方法。有任何想法吗?我可以用where来写吗?

编辑: 我最终得到了想要的东西,但是我不知道这是不是最好的方法,或者是否会出现任何性能问题。尽管我已经阅读了许多有关mongo的好东西,但我认为我必须仔细阅读所有文档才能正确使用它:

const appointments = await Appointment.aggregate([{
  "$match": {
    "$and":[
      {"nextReminderAt": {$exists: true,$gte: new Date(Date.now())}},{"expirationDate": {$gte: new Date(Date.now())}},{$expr: { $gt: [ "$expirationDate","$nextReminderAt" ] }}
    ]
  }
}]);

我原本希望使用find可以更轻松地完成类似的操作,但是我会继续搜索。据我所知,aggregate并不是您平时所有的时间。

da19890324 回答:猫鼬查询,其中一个日期字段大于另一个日期字段

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3085913.html

大家都在问