MongoDB:聚合$project添加静态值字段

28

我可以如何添加一个静态(非计算)值的自定义字段?

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

例如,我有一个名为“test”的集合,其中包含以下对象:

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

我需要将它转换为

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

那么我怎样在不循环结果的情况下添加entity_id: 54到我的代码中呢?

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

谢谢

2个回答

58

请注意,$literal是在Mongo 2.6中实现的。因此,现在您可以简单地编写:

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

请查看$literal


22

编辑:自2.6版本起,$literal表达式已经存在,因此现在不必使用解决方法。

原始回答:我知道这听起来非常愚蠢,但是你可以使用“no-op”表达式来“计算”所需内容。

例如:

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

针对这种情况,曾经有一个提议使用$literal运算符来解决,但目前尚未实现,您可以在此处投票支持。


谢谢,$literal确实很有帮助。针对你的示例进行了一点修正 - entity_id: {$add:[54]}。 - redexp
没错 - 我在想一个略微不同的例子,当然你不需要添加0 :) - Asya Kamsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接