2012-04-12 13 views
3

MongoDBを習得しようとしていますが、これを行う方法がわかりません。MongoDB - オブジェクト内の複数の属性に対してクエリを実行し、結果をグループ化する方法

のは、私はこのような3つのオブジェクトがあるとしましょう:

  { 
      "_id": 99990, 
      "type" : 15, 
      "attributes": [ 
       { 
        "id": 1, 
        "value": 115 
       } 
      ] 
     }, 
     { 
      "_id": 99991, 
      "type" : 5, 
      "attributes": [ 
       { 
        "id": 1, 
        "value": 120 
       } 
      ] 
     }, 
     { 
      "_id": 99992, 
      "type" : 5, 
      "attributes": [ 
       { 
        "id": 1, 
        "value": 120 
       } 
      ] 
     }, 
     { 
      "_id": 99993, 
      "type" : 5, 
      "attributes": [ 
       { 
        "id": 1, 
        "value": 150 
       } 
      ] 
     }, 

はどのようにアイテムを検索し、150の値を持つ属性「ID」1に基づいてのみ、ID 99993を返すことができますか?私は今MongoDBで遊んでいます。だからこれはおそらく非常に基本的な質問です。以下のよう

は、私はグループの属性/ ID /値によってタイプ5のすべての項目の結果、および結果を得ることができるか、挑戦に追加するには:

"id" : 1, "value" : 150, "count" : 1 
"id" : 1, "value" : 120: "count" : 2 

これは一例データがあり、スキーマはかなり複雑ですが、この練習の目的のためには十分であるはずです。

答えて

4

最初の部分については、あなたがやってて、そのレコードを取得することができるはずです。

ID = 1を持っている属性の配列の要素を持っている任意のオブジェクトからのみ_idフィールドを取得します
db.collectionName.find({"attributes.id": 1, "attributes.value": 150}); 

あなたの質問の2番目の部分はマッチの数を返す伴うためと= 150

値は、あなたがmap-reduceとあなたの選択肢を模索すべきです。あなたは単純なMongoクエリーでその結果を生成することはできません。

+0

支援しようとしてくれてありがとう、私は「さんと余分{_id:1}取り外し db.collectionName.find({ "追加した後、最初の部分の権利を得たattributes.id":1、「attributes.valueを":120}); これは私が探していた結果が得られたことへの感謝が、私はマップ-削減を見ていきますので – ruinernix

+0

グレートは、私は{_idを追加しました:あなたは*たかったかのように1}それが聞こえたので。。!ちょうど* _idが返されました。私はいくつかの助けになることができてうれしいです。 – clexmond

関連する問題