Mongodb как добавить условие условного совпадения $

У меня есть следующая схема

{
   f1: "test",
   f2: "something",
   type: "A",
   date: "2018-11-01T00:00:00.000Z",
   deleted: false
},
{
   "f1": "check",
   type: "B",
   deleted: false
}

Теперь я хочу получить все данные, и если type = "A", then add an extra condition to my match query, suppose compare its date with current date. Мой текущий запрос:

db.getCollection('myCollection').aggregate([
  {$match:{
        {"deleted":false},
        // I want to check if type is A then compare its date 
  }}
])
3
0
8 789
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте $match с условием $or.

db.getCollection('tests').aggregate([
  { $match: {
    $or : [
      { "deleted": false, "type": "A", "date": ISODate("2018-11-01T00:00:00.000Z") },
      { "deleted": false, type: { $ne: "A" }}
    ]}
  }
])
Ответ принят как подходящий

Вы можете попробовать $or и сказать: «Если это не тип A или, дата равна x»:

{$match:{
  $and: [
    {deleted: false},
    $or: [
      {type: {$ne: 'A'}},
      {date: {$gte: ISODate("2018-01-01T00:00:00.0Z"), $lt: ISODate("2018-06-01T00:00:00.0Z")}}
    ]
  ]
}}

Другие вопросы по теме