MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Aktualisierung und Suche der Mongodb-Einbettungsstruktur?

  1. Der Syntaxfehler liegt daran, dass Sie services.port_info in Anführungszeichen setzen müssen
  2. Allerdings $elemMatch in verschachtelten Feldern wird derzeit nicht unterstützt sowieso
  3. Zum Glück brauchen Sie $elemMatch nicht für diese Art von Anfrage

Dies sollte tun:

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

$elemMatch ist erforderlich, wenn Sie mehrere Kriterien innerhalb des Array-Objekts abgleichen möchten, z. B. „alle finden, bei denen der Port 9000 und das Protokoll UDP ist“. Das würde mit Ihrer Datenstruktur nicht unterstützt. Ich bin mir nicht sicher, warum port_info ist ein Array von Objekten (vielleicht für unsichere Situationen, in denen ein Port zu zwei verschiedenen Diensten gehören könnte?) - wenn es ein einzelnes Objekt wäre, sogar das $elemMatch unterstützt werden.

Denken Sie auch daran, dass eine solche Abfrage immer das gesamte Objekt zurückgibt.