MongoDB:具有静态值的聚合$project add字段

MongoDB:具有静态值的聚合$project add字段,mongodb,Mongodb,我可以用静态(非计算)值添加自定义字段吗 我想在发送之前准备对象,我需要删除一些具有内部信息的字段,并添加具有某些实体ID的字段 例如,我有这样的对象集合“test” {_id: ObjectId(...), data: {...}} 我需要把它转换成 {data: {...}, entity_id: 54} 那么,如何添加实体_id:54而不在代码中循环结果呢 db.test.aggregate({ $project: {_id: 0, data: 1, entity_id: ? } })

我可以用静态(非计算)值添加自定义字段吗

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

例如,我有这样的对象集合“test”

{_id: ObjectId(...), data: {...}}
我需要把它转换成

{data: {...}, entity_id: 54}
那么,如何添加实体_id:54而不在代码中循环结果呢

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

谢谢

编辑从2.6开始,
$literal
表达式已经存在,因此您现在不必使用解决方法

原始答案:我知道这听起来很愚蠢,但你可以使用“no-op”表达式来“计算”你需要的东西

例如:

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

有一个建议的
$literal
操作符正好适合这个用例,但它还没有实现,您可以投票支持它。

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

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

请参阅。

谢谢,$literal确实很有帮助。对您的示例进行了小修改-实体_id:{$add:[54]}对-我想到了一个稍微不同的示例,当然您不需要添加0:)