1

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

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

2 回答 2

3

是的,你可以,就像你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 } } })
);
于 2013-10-02T13:07:35.033 回答
0

是的,文档中有许多可用的算术运算

于 2013-10-02T13:05:47.850 回答