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