2

これらのオブジェクトをdb.invoices

{ "customer" : "john", "price" : 4, "weekday": "WED" }
{ "customer" : "john", "price" : 8, "weekday": "SUN" }
{ "customer" : "john", "price" : 6, "weekday": "SAT" }
{ "customer" : "john", "price" : 5, "weekday": "SUN" }    
{ "customer" : "bob", "price" : 10, "weekday": "SAT" }
{ "customer" : "bob", "price" : 15, "weekday": "MON" }

各顧客の最大価格を持つドキュメントを照会するにはどうすればよいですか? 上記のサンプルの場合:

[ {
  "customer": "bob",
  "price": 15,
  "weekday": "MON"
}, {
  "customer": "john",
  "price": 8,
  "weekday": "SUN"
} ]

集約フレームワークを使用してそれを理解することはできません。

編集 1: 問題はweekday、顧客名と一緒に s を取得することです。私は最高価格だけを望んでいません。

4

3 に答える 3

3

含めるweekday必要があるため、ドキュメントを事前に並べ替えて、最初に各グループから必要なドキュメントを配置し、次に$groupwithを使用する必要があり$firstます。

db.invoices.aggregate([
    {$sort: {customer: 1, price: -1}},
    {$group: {
        _id: '$customer',
        price: {$first: '$price'},
        weekday: {$first: '$weekday'}
    }}
])
于 2013-03-10T18:36:27.097 に答える
1

これがあなたが望む結果を得る方法です、それはいくつかの一つです:

db.invoices.aggregate([
    {$project: {customer: 1, other:{ price: "$price", weekday: "$weekday"}}},
    {$group: {
        _id: '$customer',
        max: {$max: '$other'}
    }
])
于 2013-03-10T20:46:26.543 に答える
0

$group演算子を使用できます。

db.invoises.aggregate([
  { $group : { _id: '$customer', price: { $max: '$price' } } }
])
于 2013-03-10T13:15:47.570 に答える