13

在 SQL 中,我可以做类似的事情

SELECT myNum, (myNum+1) as `increment` FROM myTable

有效地执行任意数学和其他函数并将它们作为结果中的字段返回。MongoDB也可以这样做吗?

db.test.find({}, {_id:1, myNum:1, increment:function() { return this.myNum + 1;}});

这不会像我期望的那样返回“增量”字段。

我可以在该主题上找到的所有其他相关问题都涉及 GROUPed 查询,而这不是;我只是在获取文档时向文档添加一个“虚拟”字段(客户端计算?)。

或者,这个问题似乎是一个没有“减少”的“地图”;每行都有自己的计算字段。有没有办法将映射函数的结果作为结果/光标返回?

4

1 回答 1

13

MongoDB 2.2 中的新聚合框架允许您通过$project运算符添加计算字段。这与任意函数并不完全相同,因为您需要使用受支持的运算符,但它确实提供了很大的灵活性。

这是将 s 递增_id到新myNum字段的示例:

MongoDB shell version: 2.2.0-rc0

> db.test.insert({_id:123});

> db.test.insert({_id:456});

> db.test.aggregate(
  { $project : {
      _id : 1,
     'myNum': { $add: [ "$_id", 1]}
  }}
)
{
    "result" : [
        {
            "_id" : 123,
            "myNum" : 124
        },
        {
            "_id" : 456,
            "myNum" : 457
        }
    ],
    "ok" : 1
}
于 2012-08-11T00:35:10.057 回答