Выбор данных между диапазоном временных меток, когда временная метка является строкой в MongoDB

#mongodb

#mongodb

Вопрос:

Структура документа в MongoDB выглядит следующим образом. Временная метка хранится в виде строки в mongo, поэтому ISODate не работает. Как я могу выбрать данные между двумя временными метками в этом случае.

     {
     "_id" : NumberLong(5702509046), 
    "totalProduct" : "0.00", 
    "status" : "COMPLETED", 
    "dateCreated" : "10/02/2020 11:31:48", 
    "lastUpdated" : "10/13/2020 15:39:18"
}
  

Среди нескольких других вещей, я попробовал что-то вроде этого, чтобы преобразовать строку date в объект date, а затем выполнить сравнение, но при этом не учитывается конечная временная метка. Он возвращает все документы, превышающие дату ввода, но не останавливается на конечной дате. Нужна помощь в исправлении этого запроса

 db.getCollection("MyCollection").find({"$expr": {"$gte": [{ "$dateFromString": { "dateString": "$lastUpdated" ,timezone:"America/New_York"}}, new Date("10/09/2020 10:40:55") ]},"$expr": {"$lte": [{ "$dateFromString": { "dateString":"$lastUpdated",timezone:"America/New_York"}}, new Date("10/12/202010:14:55") ]},status:{$in:["COMPLETED"]}},{"_id":1, "lastUpdated":1}).sort({"lastUpdated":-1});
  

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

1. Вы можете попробовать использовать тот $expr , в котором вы указываете условие (включает как больше, так и меньше).

2. Похоже, что выражение может иметь только одно поле. «Ошибка запроса с кодом ошибки 15983 и сообщением об ошибке «Объект, представляющий выражение, должен иметь ровно одно поле:»

3. используйте его с $and оператором, что-то вроде этого: $expr: { $and: [ { $gte: [ { $toDate: "$date1" }, START_DT ] }, { $lte: [ { $toDate: "$date2" }, END_DT ] } ] }

4. Да, похоже, это сработало. Спасибо за вашу помощь @prasad_