MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Atualização e pesquisa da estrutura de incorporação do Mongodb?

  1. O erro de sintaxe ocorre porque você precisa usar aspas em services.port_info
  2. No entanto, $elemMatch em campos aninhados não é compatível no momento mesmo assim
  3. Felizmente, você não precisa de $elemMatch para este tipo de consulta

Isso deve fazer:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });

$elemMatch é necessário se você quiser corresponder a vários critérios dentro do objeto de matriz, por exemplo, "encontrar tudo onde a porta é 9000 e o protocolo é UDP". Isso não seria compatível com sua estrutura de dados. Não sei por que port_info é um array de objetos (talvez para situações incertas onde uma porta pode pertencer a dois serviços diferentes?) - se fosse um único objeto, até mesmo o $elemMatch seria suportado.

Além disso, lembre-se de que essa consulta sempre retornará o objeto inteiro.