Mongodb按选择不存在列分组

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' },

我是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中也有可能

一个技巧是使用$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字段中。哼!