1

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

4

1 回答 1

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 }
}}); 
于 2013-09-30T16:29:31.593 回答