Я выполняю агрегацию для коллекции 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, для чего это стоит.