我是MongoDB新手。我试图从文档中分组数据,这是有效的。但我现在想要添加一个包含静态数据的列。
例如,我可以在SQL中编写类似的东西。
select e.dptId, count(e.empId), 'foo' as foo
from employee e
group by e.dptId, 'foo'
我试过了,
db.employee.aggregate(
{ $group: {
_id: { dptId: '$dptId', foo: 'foo' },
empCount: { $sum: 1 }
}}
);
给了我“异常:字段路径引用必须以'$'为前缀。我不能用$作为前缀,因为这将是字段引用。
我也试过这个,
db.employee.aggregate(
{ $group: {
_id: { dptId: '$dptId' },
empCount: { $sum: 1 },
foo: 'foo'
}}
);
这给了我“异常:组聚合字段'temp'必须定义为对象内的表达式”。
我尝试过使用大括号,没有大括号(如图所示)等。仍然没有运气。在mongodb甚至可能。
答案 0 :(得分:0)
一个技巧是使用$ifNull
运算符有条件地分配值:
db.employee.aggregate(
{ $group: {
_id: { dptId: '$dptId',
foo: { $ifNull: ['$foo', 'foo'] }
},
empCount: { $sum: 1 }
}}
);
在上面,它只是查找名为foo
的字段,如果它不存在,则将foo
分组字段设置为foo
的值。您也可以更改MongoDB检查的字段。
您也可以使用$concat
来获得理想的结果:
db.employee.aggregate(
{ $group : {
_id : { dptId: '$dptId',
foo: { $concat : [ "foo" ] }
},
empCount: { $sum: 1 }
}});