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トリックの 1 つは、条件付きで演算子を使用して値を代入することです。

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 に答える