计算mongodb聚合

时间:2013-10-02 12:34:22

标签: mongodb

是否可以在mongodb中进行聚合内的简单计算?

db.xy.aggregate(
{ $match: {"$prc": {$gt : 95/100}}},
{ $group: { _id: {ttl: "$ttl", prg : "$prg"}, sth: {$sum: "$tid"}}},
{ $sort:{ sth: -1 }}
);

2 个答案:

答案 0 :(得分:2)

是的,您可以,就像上面的95/100一样,可以计算...请参阅以下类似的控制台输出

查找销售额超过80的文件(使用不必要的计算来说明要点 - 将计算第二项)

> db.mat.aggregate({ $match : { "sales" : { $gt : 800 / 10 }}})

{
    "result" : [
            {
                    "_id" : ObjectId("503b58387242f5878fa6577f"),
                    "brand" : "Alpha",
                    "sales" : 100,
                    "period" : "2012-01-01"
            },
            {
                    "_id" : ObjectId("503b58497242f5878fa65780"),
                    "brand" : "Alpha",
                    "sales" : 90,
                    "period" : "2012-02-01"
            }
    ],
    "ok" : 1
}

将计算应用于返回值,在聚合框架中使用$ project和$ divide ...

> db.mat.aggregate({ $project : { "sales_percentage" : { $divide : ["$sales", 100]}}})

{
    "result" : [
            {
                    "_id" : ObjectId("503b58387242f5878fa6577f"),
                    "sales_percentage" : 1
            },
            {
                    "_id" : ObjectId("503b58497242f5878fa65780"),
                    "sales_percentage" : 0.9
            },
            {
                    "_id" : ObjectId("503b58557242f5878fa65781"),
                    "sales_percentage" : 0.8
            }
    ],
    "ok" : 1
}

这是一个完整的示例,您可以保存到文件并通过命令行运行,如C:\MongoDb\mongo < test.js,以查看您可以将小数表示为0.x或xx / 100,并且两者都有效。

use example;

db.testData.insert({ name : "test row 1", prc : 0.5 });
db.testData.insert({ name : "test row 2", prc : 0.6 });
db.testData.insert({ name : "test row 3", prc : 0.7 });
db.testData.insert({ name : "test row 4", prc : 0.8 });
db.testData.insert({ name : "test row 5", prc : 0.9 });
db.testData.insert({ name : "test row 6", prc : 1.0 });

print("Using 0.6...");

printjson(
    db.testData.aggregate({ $match : { "prc" : { $gt : 0.6 } } })
);

print("Using 60/100...");

printjson(
    db.testData.aggregate({ $match : { "prc" : { $gt : 60 / 100 } } })
);

答案 1 :(得分:0)

是的,有许多可用的算术运算in documentation