‘$ eq’ не работает с массивами в датах в mongodb

#javascript #database #mongodb #mongodb-query #aggregation-framework

#javascript #База данных #mongodb #mongodb-запрос #агрегация-фреймворк

Вопрос:

‘$ eq’ не работает с датами. Кто-нибудь может мне помочь в этом.
Итак, что я пытаюсь сделать, я хочу искать документы на основе нескольких дат. В документе есть поле startdate, по которому я хочу выполнить поиск. Если я дам простой запрос, он восстановит документ. Но когда я дам массив дат в ‘$ eq’, он не работает. Может кто-нибудь указать на ошибку или переформатировать этот запрос для работы.

 db.getCollection('campaigngrid').find({
    startdate: { '$eq': [ ISODate('2021-02-05'), ISODate('2021-02-12') ] },
//    startdate: ISODate('2021-02-05'),
    active: true
})
 

Поэтому я дважды проверил запрос. И документ тоже там. Когда я просто выполняю поиск с помощью простого запроса, он извлекает документы (которые я только что прокомментировал).
Заранее спасибо.

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

1. Пробовали ли вы какие-либо другие операторы запроса сравнения , кроме $eq ?

Ответ №1:

Я думаю, вы пытаетесь найти, где дата ISODate (‘2021-02-05’) или ISODate (‘2021-02-12’)

Но ваша проблема в том,

  $eq: [ISODate('2021-02-05'), ISODate('2021-02-12')]
 

найдет, где startdate = [ISODate(‘2021-02-05’), ISODate(‘2021-02-12’)];

Чтобы найти, где startdate равен хотя бы одной из ваших дат, что-то вроде этого:

 db.getCollection('campaigngrid').find({
    startdate: { '$in': [ ISODate('2021-02-05'), ISODate('2021-02-12') ] },
    active: true
})
 

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

1. Приветствую вас @YashJaiswal . Это случается со всеми нами.