Isso não é na verdade. A primeira consulta,
db.users.find({"user":{"login":"tester"}});
, significa que você está procurando um user
que é igual a {"login":"tester"}
objeto completamente, não um usuário com login
campo é igual a tester
. Há um documento que corresponde a esse critério e esse documento realmente retornou como resultado da consulta. Da mesma forma, a segunda consulta,
db.users.find({"user":{"name":"anil"}});
, significa que você está procurando um user
que é igual a {"name":"anil"}
objeto completamente. Não existe tal user
. Há um documento que corresponde parcialmente à sua consulta, mas não é suficiente. Se você estiver procurando por um
user
com name
igual a anil
, use Notação de ponto para acessar o subdocumento, como você fez em seu segundo grupo de consultas. Sim. esta é a maneira correta.