Я пытаюсь проверить свою коллекцию, чтобы вернуть все документы, где элемент массива в документе является определенным значением.Как найти элемент в документе - MongoDB?
Например, вот один из моих документов JSON:
[
{
"employer" : "[email protected]",
"applicants" : [
{
"email" : "[email protected]"
},
{
"email" : "[email protected]"
}
]
},
{
"employer" : "[email protected]",
"applicants" : [
{
"email" : "[email protected]"
}
]
},
{
"employer" : "[email protected]",
}
]
Теперь, что я хотел бы Возвращается любой документ, в котором массив соискатели не содержит электронную почту "[email protected]"
OR, где есть no applicants array
.
В моем примере JSON выше, он должен вернуть документы для employer1
и .
Я дошел до того, что возвратил документы, где заявитель [email protected] does not exist
, поэтому работодатель1, но я не понимаю, как я могу также включить employer3
. Как я могу это сделать?
Это мой запрос до сих пор в JavaScript:
collection.find({"applicants.email" : {$ne : req.user.username}}, {}, function(e,docs){
res.json(docs);
console.log(docs);
});
Использование $ elemMatch найти объект в массиве, как это '{претендентам: {$ elemMatch: {адрес электронной почты: {$ пе: req.user. email}}}} ' – Molda
Это не работает, оно возвращает []. Если я добавлю «заявителей»: [] в мой документ, у исходного запроса у меня были работы, но я не думаю, что мне нужно было бы добавить пустой массив, чтобы получить эту работу, должен ли я? – user2573690
Хм, странно, я не могу проверить это сейчас. Затем попробуйте исходный запрос: {$ или: [{"претенденты: $ или: [{$ exists: false}, {$ size: 0}], {" applicants.email ": {$ ne: req.user .username}]} 'this должно возвращать документы, в которых массив заявителей не существует или пуст, или письмо не является req.user.username – Molda