2

次のようなドキュメントを含む MongoDB コレクションがあるとします—</p>

{
  "name": "Hawaiian",
  "toppings": ['cheese', 'ham', 'pineapple'],
}

すべてのコレクションのリストを取得するにはどうすればよいtoppingsですか?

MapReduce または新しい集約フレームワーク (理想的には、新しい集約フレームワークを使用できないため MapReduce) を使用する必要があると思いますが、その方法がわかりません。

ありがとう!

編集:そして、データベースレベルで個別のトッピングの数を数える方法はありますか?

4

3 に答える 3

1

distinct は、限られた数のユニークなアイテム (<=50k?) で機能します。

それ以上の場合は、mapreduce を使用する必要があります

fun_map ="""function () for (e in this.toppings) { emit (entities.toppings[e],1); } """

fun_reduce = """function (key, values) {var total = 0; for (var i = 0; i < values.length; i++) { total += values[i]; } return total;}""" thenあなたが呼ぶ

collection.map_reduce(fun_map,fun_reduce,out={"replace":'your_outputcollection_name"}, full_response=True)

トッピング項目は出力コレクションの _id になり、値は各特定のトッピングの数を表します

于 2012-11-05T14:26:40.213 に答える
1

MongoDB はDISTINCT集計をサポートしています。これでうまくいくはずです。

于 2012-11-05T13:58:23.120 に答える
1

distinctそのためにクエリを使用できます。

db.coll.distinct('toppings')
于 2012-11-05T13:59:00.557 に答える