MongoDB Aggregation: невозможно ссылаться на поля с помощью $ cond - PullRequest
0 голосов
/ 23 января 2019

Я выполняю агрегацию для коллекции MongoDB.Шаги, предшествующие актуальным $cond, не важны, поэтому я для краткости отредактирую их:

db.mycoll.aggregate([
  { $match: ... },
  { $project: ... },
  { /* this is the problem step */ }
])

Документы, которые создаются с помощью шага 2, $project, имеют следующую форму:

{
  "blueTeam": true,
  "redTeam": false,
  "winner": true
}

Теперь при условии, что я добавляю дополнительный прогноз, который использует $cond - мне не разрешено обращаться к полям из проецируемого документа.Вот наивный пример:

{
  $project: {
    blueTeam: "$blueTeam",
    winnerAsInteger: {
      $cond: [ { "$winner": true }, 1, 0 ]
    }
  }
}

Ожидание : конвейер генерирует документы, в которых выигрышные документы имеют поле winnerAsInteger, равное 1, в противном случае 0.

Реальность : Этот шаг конвейера приводит к ошибке.

В клиенте MongoDB Node ошибка выглядит следующим образом:

(узел: 34380) UnhandledPromiseRejectionWarning: MongoError: Нераспознанное выражение'$ winner'

В графическом интерфейсе агрегации MongoDB Compass ошибка:

Поле не должно начинаться с '$' или '.', путь к полю был: $winner

Это, кажется, прямо противоречит документации относительно этого, которая ссылается на поля документа с синтаксисом $.

Я на MongoDB 4.0.5, для чего это стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...