2016-11-18 21 views
0

を返さない見つけ、私はこのデータ構造を持っている:オブジェクトのMongoDBのオブジェクトは、任意の値

{ 
"_id" : ObjectId("582ecaa97be792282ca31bc4"), 
"hero" : { 
    "5001" : { 
     "id" : 5001 
     "name" : "Rogue" 
      } 
    "5002" : { 
     "id" : 5002 
     "name" : "Mage" 
      } 
    "5003" : { 
     "id" : 5002 
     "name" : "Paladin" 
      } 
     } 
} 

私は、クエリを持っています。

db.getCollection('hero').find({"Hero":{"5001":{"id" : 5001}}}) 

結果は0です。 私はHerosを別々に保存することができましたが、このクエリを最初に行う方法を知りたいと思います。私が5001などで照会すれば、5001未満のすべてのデータが得られます。

ありがとうございます!

編集:私はドット表記法を使って答えを見つけましたが、私はすでにドット表記を試みましたが、試してみると少し間違いました。他の誰かが見ているなら、あなたがすることはここにあります。

db.Runes.find({ "hero.5001.id": 5001 },{"hero.5001":1}) 
+0

MongoDBのクエリと投影演算子の詳細です。 – styvane

+0

もちろん、私もそれをやります、ありがとう! – Djinnes

答えて

1

最初にしてみてくださいあなたは「ヒーロー」と「英雄」フィールドを照会することはできませんので、すべてのフィールドは大文字と小文字が区別されます。

秒あなたはので、あなたのそのドキュメントへの適切な方法がなる「ドット表記」

https://docs.mongodb.com/manual/core/document/#dot-notation

を使用する必要があり、ネストされた文書を照会している場合。

db.getCollection('hero').find({"hero.5001.id" : 5001}) 

文書全体が返されます。したがって、5002と5003のキーを持つヒーローオブジェクト全体が同じドキュメントに属しているので、それも返されます。投影を使用して、必要なフィールドだけを投影することができます。ここで

db.getCollection('hero').find({"hero.5001.id": 5001},{"hero.5001" : 1}) 

次のように行うことができます は、私はあなたがあなたの文書構造を変更し、確認する必要がありました `サブ文書の配列をhero` https://docs.mongodb.com/v3.2/reference/operator/query/

0

ただ、すべてのこの

db.getCollection('hero').find({"hero.5001.id" : 5001}) 
関連する問題