Подтвердить что ты не робот

MongoDB: агрегировать $project добавить поле со статическим значением

Можно ли каким-либо образом добавить настраиваемое поле со статическим (не вычисленным) значением?

Я хочу подготовить объекты перед отправкой, и мне нужно удалить некоторые поля с внутренней информацией и добавить поле с некоторым идентификатором объекта.

Например, у меня есть коллекция "test" с такими объектами

{_id: ObjectId(...), data: {...}}

И мне нужно преобразовать его в

{data: {...}, entity_id: 54}

Итак, как я могу добавить entity_id: 54, не зацикливая результат в моем коде?

db.test.aggregate({ $project: {_id: 0, data: 1, entity_id: ? } })

Спасибо

4b9b3361

Ответ 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.