有两种命令模式
1.
db.houseInfo.aggregate([
{ $match : { "province" : "天津"}},
{ $group : { _id : "$province", num_tutorial : {$sum : "$valuationPrice"} }}
]);
$match 后面写的是查询条件
$group后面写的是查询的字段,_id 指定的是province字段,num_tutorial 是对valuationPrice字段的求和。
返回结果形式
{
"_id" : "天津",
"num_tutorial" : 0
}
我在使用的时候遇到一个问题,mongodb中valuationPrice存储的类型是string,所以求和出来结果0,在不改变原有的数据类型的情况下,改用下面这种方法。
2.
db.runCommand({"group":{
"ns":"houseInfo",
"key":"beginTime",
"initial":{"total":0},
"$reduce" : function(doc,prev){
prev.total += parseFloat(doc.valuationPrice);
},
"condition":{"beginTime":{$regex: '^201705.*$', $options:'i'}}}
}});
ns 为collection的名称
initial初始化total变量的值为0
$reduce 后面写的是计算的函数,这种利用parseFloat()函数将字符串转换为浮点型。
condition后面为查询条件.
返回结果形式
/* 1 */
{
"retval" : [
{
"total" : 15304977820.93
}
],
"count" : NumberLong(3301),
"keys" : NumberLong(1),
"ok" : 1.0
}