Игра с mongodb $expr $gt и $and вместе не работает

Я играю с mongodb, но сталкиваюсь с проблемами при использовании оператора $expr $gt и $and.

создана площадка для лучшего понимания..

Игровая площадка Mongo

Что я хочу здесь, если дата сбора истории больше, чем дата основного сбора, и проверьте, что user_id истории не совпадает с моим входным идентификатором. тогда он не будет отображать никаких данных, в противном случае отобразите все данные, как это возможно, пожалуйста, помогите


person Sunil Dubey    schedule 25.04.2020    source источник
comment
Можете ли вы перефразировать свои требования без двойного отрицания, чтобы им было легче следовать?   -  person D. SM    schedule 25.04.2020
comment
Я хочу отображать только те, которые меньше даты основной коллекции, которые будут сравниваться с датой истории и чей введенный user_id не входит в коллекцию истории.   -  person Sunil Dubey    schedule 25.04.2020
comment
Итак, вы хотите основную дату ‹ дату истории, но ваш конвейер агрегации требует основную дату › дату истории?   -  person D. SM    schedule 25.04.2020


Ответы (1)


попробуй это

db.main.aggregate([
  {
    $lookup: {
      from: "history",
      localField: "history_id",
      foreignField: "_id",
      as: "History"
    }
  },
  {
    $unwind: "$History"
  },
  {
    "$match": {
      $expr: {
        $cond: {
          if: {
            $in: [
              "5e4a8d2d3952132a08ae5763",
              "$History.user_id"
            ]
          },
          then: {
            $gt: [
              "$date",
              "$History.date"
            ]
          },
          else: {}
        }
      }
    }
  }
])

мы можем использовать $cond для соответствия нашим требованиям

это вернет следующее

1- если указанный идентификатор пользователя существует в массиве user_id, то он получит все документы, у которых дата > дата истории

2- если указанный идентификатор пользователя не существует в массиве user_id, он вернет все документы

проверьте эту Игровую площадку Mongo

person Mohammed Yousry    schedule 25.04.2020
comment
Комментарии не для расширенного обсуждения; этот разговор был перенесено в чат. - person Samuel Liew♦; 27.04.2020