Mongodb按选择不存在列分组
我是MongoDB的新手。我正在尝试将文档中的数据分组,这很有效。但我现在想添加一个包含静态数据的列 例如,我可以在SQL中编写类似的内容Mongodb按选择不存在列分组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我是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' },
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中也有可能 一个技巧是使用$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 }
}});
谢谢你的回复。第一个,我们试图使它成为_id的一部分,由于“意外令牌}”而失败,尽管我已经多次复制并重新验证了脚本。所有的{和}都在匹配。如果我删除foo部分,它将正常工作。至于concat,我不能使用它,因为它不是组操作符的一部分。$concat肯定可以与$group一起工作。我扩展了代码。另外-我在键入代码时不小心遗漏了$isNull的[和]数组标记。非常感谢。他们都工作了!!!方括号起了作用。至于concat,我试着在id字段之外这样做。来自sql后台,我应该知道它应该在id字段中。哼!