62

各州の郵便番号が最も多い都市を見つけるためのクエリに取り組んでいます。

db.zips.distinct("state", db.zips.aggregate([ 
    { $group:
      { _id: {
           state: "$state", 
           city: "$city" 
         },
        numberOfzipcodes: { 
           $sum: 1
         }
      }
    }, 
    { $sort: {
        numberOfzipcodes: -1
         }
      }
  ])
)

クエリの集計部分は正常に機能しているように見えますが、個別を追加すると空の結果が得られます。

これは、IDに状態があるためですか?のようなことはできますdistinct("_id.stateか?

4

4 に答える 4

127

集計フレームワークで$addToSetを使用して、個別のオブジェクトをカウントできます。

例えば:

db.collectionName.aggregate([{
    $group: {_id: null, uniqueValues: {$addToSet: "$fieldName"}}
}])

または、null _id レコード内のサブドキュメントではなく、一意の値を適切なリストに取得するように拡張します。

db.collectionName.aggregate([
    { $group: {_id: null, myFieldName: {$addToSet: "$myFieldName"}}},
    { $unwind: "$myFieldName" },
    { $project: { _id: 0 }},
])
于 2016-02-03T20:31:24.887 に答える
58

Distinct と集約フレームワークは相互運用できません。

代わりに、次のことが必要です。

db.zips.aggregate([ 
    {$group:{_id:{city:'$city', state:'$state'}, numberOfzipcodes:{$sum:1}}}, 
    {$sort:{numberOfzipcodes:-1}},
    {$group:{_id:'$_id.state', city:{$first:'$_id.city'}, 
              numberOfzipcode:{$first:'$numberOfzipcodes'}}}
]);
于 2013-05-03T22:59:02.440 に答える