MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb intègre la mise à jour et la recherche de la structure ?

  1. L'erreur de syntaxe est due au fait que vous devez utiliser des guillemets autour de services.port_info
  2. Cependant, $elemMatch dans les champs imbriqués n'est actuellement pas pris en charge de toute façon
  3. Heureusement, vous n'avez pas besoin de $elemMatch pour ce type de requête

Cela devrait faire :

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

$elemMatch est nécessaire si vous souhaitez faire correspondre plusieurs critères à l'intérieur de l'objet tableau, par exemple "trouver tout où le port est 9000 et le protocole est UDP". Cela ne serait pas pris en charge avec votre structure de données. Je ne sais pas pourquoi port_info est un tableau d'objets (peut-être pour des situations incertaines où un port pourrait appartenir à deux services différents ?) - s'il s'agissait d'un seul objet, même le $elemMatch serait pris en charge.

N'oubliez pas non plus qu'une telle requête renverra toujours l'objet entier.