web-dev-qa-db-ja.com

MongoDB:配列内のアイテムの数を数える

私には、コレクション内のすべてのドキュメントに、埋め込みドキュメントのセットを含むfooという名前の配列があるコレクションがあります。 MongoDBシェルには、foo内にあるインスタンスの数をカウントする簡単な方法がありますか?何かのようなもの:

db.mycollection.foos.count()またはdb.mycollection.foos.size()

配列内の各ドキュメントには一意のfoo_idが必要であり、コレクション内のランダムなドキュメントの配列内に適切な数の要素があることを確認するために、簡単なカウントを行いたいと思います。

24
randombits

MongoDB 2.6では、Aggregation Frameworkに新しい配列 $size 演算子を使用できます。

> db.mycollection.insert({'foo':[1,2,3,4]})
> db.mycollection.insert({'foo':[5,6,7]})

> db.mycollection.aggregate({$project: { count: { $size:"$foo" }}})
{ "_id" : ObjectId("5314b5c360477752b449eedf"), "count" : 4 }
{ "_id" : ObjectId("5314b5c860477752b449eee0"), "count" : 3 }
48
Stennie

mongoの最新バージョン(2.2以降)を使用している場合は、集約フレームワークを使用できます。

db.mycollection.aggregate([
  {$unwind: '$foo'},
  {$group: {_id: '$_id', 'sum': { $sum: 1}}},
  {$group: {_id: null, total_sum: {'$sum': '$sum'}}}
])

これにより、コレクションの合計foosが得られます。

最後のgroupを省略すると、レコードごとの結果が集計されます。

22
xlembouras