Запрос Mongodb на основе текущего времени

#javascript #mongodb #datetime #mongodb-query

Вопрос:

Я пытаюсь сделать запрос mongo, который возвращает все активные списки на основе $currentDate

 {
  $and: [
    {
      start_time: {
        $lte: {
          $currentDate: {
            $type: "date"
          }
        }
      }
    }, 
    {
      end_time: {
        $gte: {
          $currentDate: {
            $type: "date"
          }
        }
      }
    }
  ]
}
 

но он ничего не возвращает, но если я настрою end_time:{$gte {$lte отображение ВСЕХ списков, значит, должно быть что-то не так

Я помещаю даты в БД с помощью javascript

 if (checked) {
  var d = new Date()
  d.setSeconds(d.getSeconds()   values.sale_price * 100)
  setFieldValue('start_time', { date: new Date() })
  setFieldValue('end_time', { date: d })
}
 

я думаю, что это может быть неправильно при добавлении секунд к конечному времени, но не уверен

а вот копия документа БД

 {
  "_id": {
    "$oid":"61401b66t4e445t5j43j748e"
  },
  "name": "test",
  "sale_price": {
    "$numberInt": "5000"
  },
  "start_time": {
    "date": "2021-09-14T03:47:31.918Z"
  },
  "end_time":{
    "date": "2021-09-19T22:40:51.918Z"
  }
}
 

Комментарии:

1. $currentDate используется для обновления документов, вы не можете использовать его в запросах.

Ответ №1:

 db.collection.find({
  $and: [
    {
      "start_time.date": {
        $lte: new Date()
      }
    },
    {
      "end_time.date": {
        $gte: new Date()
      }
    }
  ]
})
 

Вот рабочий пример

Примечание: Убедитесь, что типом start_time.date данных и end_time.date является Дата, а не строка

Комментарии:

1. Спасибо! @chandan Я вижу, что это работает на игровой площадке, но не в моем проекте, может ли быть так, как я вводлю даты js?

2. его код javascript выше « setFieldValue(‘start_time’, { дата: новая дата ()}) ` » Я думаю, что монго каким-то образом не анализирует его в ISODate

3. @dovigz поделись setFieldValue реализацией