MongoDB: агрегировать $project добавить поле со статическим значением
Можно ли каким-либо образом добавить настраиваемое поле со статическим (не вычисленным) значением?
Я хочу подготовить объекты перед отправкой, и мне нужно удалить некоторые поля с внутренней информацией и добавить поле с некоторым идентификатором объекта.
Например, у меня есть коллекция "test" с такими объектами
{_id: ObjectId(...), data: {...}}
И мне нужно преобразовать его в
{data: {...}, entity_id: 54}
Итак, как я могу добавить entity_id: 54, не зацикливая результат в моем коде?
db.test.aggregate({ $project: {_id: 0, data: 1, entity_id: ? } })
Спасибо
Ответы
Ответ 1
Я знаю, что это может показаться действительно глупым, но вы можете использовать выражение "no-op" для "вычисления" того, что вам нужно.
Пример:
db.test.aggregate( { $project : {_id:0, data:1, entity_id: {$add: [54]} } } )
Для данного варианта использования был предложен оператор $literal, но он еще не реализован, вы можете проголосовать за него здесь.
Ответ 2
Обратите внимание, что $literal был реализован в Mongo 2.6.
Итак, теперь вы можете просто написать:
db.test.aggregate(
{$project: {_id: 0, data: 1, entity_id: {$literal: 54}}})
См. $literal.