2016-11-07 3 views
2

目的

私は原料の配列(文書も含む)を含むレシピ文書を持っています。私はある成分を含むすべてのレシピを手に入れたいと思う。アレイ内に別のドキュメントを含むすべてのドキュメントを取得するにはどうすればよいですか?

背景

は、私は次のようなレシピ文書を考えてみましょう:

{ 
     name: "Red Velvet Cake", 
     ingredients: [{ 
      name: "roasted beet", 
      amount: { 
       quantity: 0.5, 
       metric: metrics[0] 
      } 
     }, { 
      name: "orange", 
      amount: { 
       quantity: 0.25, 
       metric: metrics[0] 
      } 
     }], 
     preparation: "Mix everything and have fun!", 
     Source: "Super Smoothies, p. 142" 
    } 

さて、私は多くのレシピでコレクションを持っている、と私は「みかんを持っているすべてのレシピをしたいと言うことができます"成分として。

db.smoothies.find({ ingredients: {name: "orange"}}) 

しかし、それは動作しません:私はMongoDBの者コンソールを使用して次のことをしようとしていますこれを実現するために

を試してみました何

私は何人かの人々が$all$in$existsのようなキーワードを使用しますが、私はこれらが私を助けることができるかわからないよFind document with array that contains a specific valueのような他の質問でお読みください。

質問

クエリを動作させるにはどうすればよいですか?

+1

は '配列の要素を照会するために、[ドット表記](https://docs.mongodb.com/manual/core/document/#dot-notation)を使用しますdb.smoothies.find({"ingredients.name": "orange"}) 'または[' $ elemMatch'](https://docs.mongodb.com/v3.2/reference/operator/query/elemMatch/# – chridam

答えて

2

はこのようなクエリを書く:

db.smoothies.find({ "ingredients.name": "orange"}) 
-1

はMongoDBのことは知らないが、これは私はバニラのJavaScriptでそれを行うだろうかです:

var recipes = [{ 
 
    name: "Red Velvet Cake - No Orange", 
 
    ingredients: [{ 
 
    name: "roasted beet" 
 
    }] 
 
}, { 
 
    name: "Red Velvet Cake", 
 
    ingredients: [{ 
 
    name: "roasted beet" 
 
    }, { 
 
    name: "orange" 
 
    }] 
 
}] 
 

 
console.log(recipes 
 
    .find(function(a) { 
 
    return a.ingredients.some(function(b) { 
 
     return b.name == "orange" 
 
    }); 
 
    }))

Polyfillsを必要に応じて:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find#Polyfill

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some#Polyfill

+0

答えの半分のコードがpolyfillsである場合(つまり、埋め込まれたドキュメントの配列)は '' db.smoothies.find({"ingredients":{"$ elemMatch":{"name": "orange"}}})残りのコードの80%がOPのデータであるため、あなたの答えをどのように構造化しているのかを再検討したいかもしれません。言い換えれば、ポリフィル(___Especially___はスニペットのHTMLフィールドの '

  • 11. 別のサイトを含む<iframe>のコンテンツを取得するにはどうすればよいですか?
  • 12. ネストされたドキュメントを含むドキュメントを取得しようとしています
  • 13. GoogleドキュメントからPDFドキュメントをダウンロードしてブラウザに表示するにはどうすればよいですか?
  • 14. couchdb内のすべての参照ドキュメントを含む
  • 15. 受信者がドキュメントのすべてのフィールドに書いた内容を取得するにはどうすればよいですか?
  • 16. Umbracoデータエディタで現在のドキュメントのIDを取得するにはどうすればよいですか?
  • 17. クリックしたノードのIDをcytoscape.jsで取得するにはどうすればよいですか?ドキュメントの
  • 18. MongoDBドキュメントでマップフィールドを取得せずにマップフィールドを更新するにはどうすればよいですか?
  • 19. Intellijの非コアライブラリのドキュメントの参照を取得するにはどうすればよいですか?
  • 20. Googleスクリプトで作成したファイルのドキュメントIDを取得するにはどうすればよいですか?
  • 21. 埋め込みSVGドキュメントのテキストをJSで取得するにはどうすればよいですか?
  • 22. Perl 6のドキュメントを$ * REPOのように読むにはどうすればよいですか?
  • 23. C#XMLドキュメントのコメントからMSDN /公式ドキュメントにリンクするにはどうすればよいですか?
  • 24. DOM:ドキュメント内のすべてのテキストノードを取得する(PHP)
  • 25. クレートワイドのドキュメントを作成するにはどうすればよいですか?
  • 26. Rubyのドキュメントを編集するにはどうすればよいですか?
  • 27. Googleドキュメントの説明を取得するにはどうすればよいですか?
  • 28. 内部オブジェクト内のElasticsearchネストされたドキュメントをクエリするにはどうすればよいですか?
  • 29. Magento用のAPIドキュメント/ドキュメントを生成するにはどうすればよいですか?
  • 30. Swagger APIドキュメントにSwashbuckleを使用してサブクラスを含めるにはどうすればよいですか?