MongoDB:使用静态值聚合$ project add字段

red*_*exp 24 mongodb

我能以某种方式添加静态(未计算)值的自定义字段吗?

我想在发送之前准备对象,我需要删除一些包含内部信息的字段,并添加一些实体ID字段.

例如,我有像这样的对象的集合"test"

{_id: ObjectId(...), data: {...}}
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为

{data: {...}, entity_id: 54}
Run Code Online (Sandbox Code Playgroud)

那么如何在我的代码中添加entity_id:54而无需循环结果?

db.test.aggregate({ $project: {_id: 0, data: 1, entity_id: ? } })
Run Code Online (Sandbox Code Playgroud)

谢谢

Ela*_*lad 45

请注意,$ literal是在Mongo 2.6中实现的.所以现在你可以简单地写:

db.test.aggregate(
   {$project: {_id: 0, data: 1, entity_id: {$literal: 54}}})
Run Code Online (Sandbox Code Playgroud)

$ literal.


Asy*_*sky 20

从2.6开始编辑$literal表达式,因此您现在不必使用变通方法.

原始答案:我知道这可能听起来很愚蠢,但你可以使用"无操作"表达来"计算"你需要的东西.

例:

db.test.aggregate( { $project : {_id:0, data:1, entity_id: {$add: [54]} } } )
Run Code Online (Sandbox Code Playgroud)

有一个提议的$literal运营商正是这个用例,但它还没有实现,你可以在这里投票.