2016-06-30 14 views
1

私は以下に述べるものと非常によく似たコレクション(ユーザ)を持っています。私はサブ文書にアクセスするmongodb

> db.users.find({"user":{"login":"tester"}}); 

を行うと、私は以下のやるときしかし、私は何のレコードを取得していない結果

{ "_id" : ObjectId("5773fc2826e0b6cf532569ca"), "user" : { "login" : "tester" } } 

としてこれを取得

db.users.find().pretty(); 
{ 
     "_id" : ObjectId("5773fc2826e0b6cf532569ca"), 
     "user" : { 
       "login" : "tester" 
     } 
} 
{ 
     "_id" : ObjectId("5773fd6426e0b6cf532569cb"), 
     "user" : { 
       "login" : "tester", 
       "name" : "anil" 
     } 
} 

。 >

db.users.find({"user":{"name":"anil"}}); 

2番目のクエリが応答を返さないんなぜ私の質問はありますか?

また、上記の例に基づいて、これがサブ文書にアクセスする正しい方法であるかどうか疑問に思っていますか?

サブ文書に.notationでアクセスしないでください。以下のようなもの?これは 正しい方法であれば上記の例に基づいて、また

db.users.find({"user.login":"tester"}); 
{ "_id" : ObjectId("5773fc2826e0b6cf532569ca"), "user" : { "login" : "tester" } } 
{ "_id" : ObjectId("5773fd6426e0b6cf532569cb"), "user" : { "login" : "tester", "name" : "anil" } } 

> db.users.find({"user.name":"anil"}); 
{ "_id" : ObjectId("5773fd6426e0b6cf532569cb"), "user" : { "login" : "tester", "name" : "anil" } } 
> 

答えて

3

、(私は両方の場合で正しい出力を得るため、その場合に)、私も疑っていサブ文書にアクセスするには?

これは実際ではありません。最初のクエリdb.users.find({"user":{"login":"tester"}});は、が完全に{"login":"tester"}オブジェクトに一致し、loginフィールドがtesterと等しいユーザーではないことを検索していることを意味します。その基準に一致する1つの文書があり、その文書が実際に照会結果として戻されます。

同様に、2番目のクエリdb.users.find({"user":{"name":"anil"}});は、{"name":"anil"}というオブジェクトに完全に等しいuserを探していることを意味します。そのようなuserはありません。クエリに部分的に一致するドキュメントが1つありますが、それだけでは不十分です。

あなたはnameuserを探している場合は、クエリの2番目のグループで行ったように、サブ文書にアクセスするためにドット表記を使用し、anilに等しいです。

.notationでサブ文書にアクセスしないでください。下の のようなもの? (その場合、どちらの場合も正しい出力が得られます)

はい。これは正しい方法です。

+1

私の疑問を解決してくれてありがとう.. – user641887

関連する問題