12

次の MongoDB の「レシピ」コレクションを検討してください。

{
  "title" : "Macaroni and Cheese",
  "ingredients" : [
    { "name" : "noodles", "qty" : "2 c" },
    { "name" : "butter", "qty" : "2 tbl" },
    { "name" : "cheese", "qty" : "1 c" },
  ]
},
{
  "title" : "Pound Cake",
  "ingredients" : [
    { "name" : "sugar", "qty" : "1 lb" },
    { "name" : "butter", "qty" : "1 lb" },
    { "name" : "flour", "qty" : "1 lb" },
  ]
},
{
  "title" : "Dough",
  "ingredients" : [
    { "name" : "water", "qty" : "2 c" },
    { "name" : "butter", "qty" : "8 tbl" },
    { "name" : "flour", "qty" : "1 lb" },
  ]
}

すべてのレシピを作成するために購入するアイテムの「買い物リスト」を生成するクエリを作成したいと考えています。だから私は基本的に「麺」、「バター」、「チーズ」、「砂糖」、「バター」、「小麦粉」、「水」の材料を返したいと思っています。重複はしたくありません。(たとえば、砂糖とバターは複数のレシピに表示されますが、それらを 1 回だけ返したい、つまり重複しないようにします。)

MongoDB でそのようなクエリを作成することは可能ですか?もしそうなら、このクエリは何でしょうか? それとも、「食材」用に別のコレクションを作成する必要がありますか?

4

4 に答える 4

35

distinctの個別の値の配列を検索するために使用します。ingredients.name

db.recipes.distinct('ingredients.name')

収量[ "butter", "cheese", "noodles", "flour", "sugar", "water" ]

于 2013-11-12T08:07:58.387 に答える
13

次のクエリは、重複を除いた裸のリストを提供します。

db.recipes.aggregate([{$unwind:"$ingredients"},{$group:{_id:"$ingredients.name"}}])

数量を追加するには、さらに作業が必要になります。数量の単位を別途指定していただけると助かります。

于 2013-11-12T08:01:02.000 に答える