mongodb $ или всегда возвращать false (const) - PullRequest
0 голосов
/ 27 ноября 2018

Я создаю конвейер агрегации для извлечения документов и добавляю новое поле «expired» (логическое), его значение основано на поле «expireAt» (Date)

поле с истекшим сроком считается истинным, если:

  • expiredAt отсутствует или нулевой или пустой
  • expiredAt <сейчас </li>

это моя пробная версия:

{project:
expired: {
          $not: {
            $or: [{ expireAt: null }, { $gte: ['$expireAt', new Date()] }]
          }
        }
}

этот код всегдадать мне ложь, даже если документ имеет значение expireAt, которое

, выполнив объяснение:

{ '$project': { _id: true, expireAt: true, expired: { '$cons
    t': false } } }

результат запроса:

  • обратите внимание на поле expireAtи соответствующее значение с истекшим сроком действия
  • сегодня равно: 27/11/2018

    {expired: false}, {expireAt: 2019-07-15T17: 18: 11.000Z, expired:false}, {expireAt: 2017-07-16T17: 18: 11.000Z, срок действия истек: false},

также {expireAt: {$ существующие: false}} выдают ошибку: MongoError:Нераспознанное выражение '$ Существует' в queryCallback

любая идея, чтобы проверить существование поля (если его значение равно нулю или нет)

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

у меня работал следующий код:

expired:{
$and: ['$expireAt', { $lt: ['$expireAt', new Date()] }]
}
0 голосов
/ 27 ноября 2018

Используйте оператор $cond для достижения

. Ниже приведенный запрос поможет вам:

Я использовал date в своем поле.

db.getCollection('chat').aggregate([
  {
    $project: {
      'date': 1,
      "expired": {
        $cond: {
          if: { $gte: ['$date', new Date()] },
          then: false,
          else: true
        }
      }
    }
  }
])

С $or

db.getCollection('chat').aggregate(
   [
     {
       $project:
          {
            date: 1,
            expired: { $or: [ { $lt: [ "$date", new Date() ] }, { $eq: [ "$date", null ] } ] }
          }
     }
   ]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...