- Der Syntaxfehler liegt daran, dass Sie
services.port_info
in Anführungszeichen setzen müssen - Allerdings
$elemMatch
in verschachtelten Feldern wird derzeit nicht unterstützt sowieso - 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.