- Синтактичната грешка е, защото трябва да използвате кавички около
services.port_info
- Въпреки това,
$elemMatch
във вложени полета в момента не се поддържа както и да е - За щастие не ви трябва
$elemMatch
за този вид заявка
Това трябва да направи:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch
се изисква, ако искате да съпоставите множество критерии в обекта на масива, например „намери всички, където портът е 9000 и протоколът е UDP“. Това няма да се поддържа от вашата структура на данни. Не съм сигурен защо port_info
е масив от обекти (може би за несигурни ситуации, при които един порт може да принадлежи на две различни услуги?) - ако беше един обект, дори $elemMatch
ще се поддържа.
Освен това имайте предвид, че такава заявка винаги ще върне целия обект.