我正在尝试检查我的集合以返回文档中数组元素是特定值的所有文档。
例如,这是我的一个文档JSON:
[
{
"employer" : "employer1@gmail.com",
"applicants" : [
{
"email" : "joe@gmail.com"
},
{
"email" : "fred@gmail.com"
}
]
},
{
"employer" : "employer2@gmail.com",
"applicants" : [
{
"email" : "steven@gmail.com"
}
]
},
{
"employer" : "employer3@gmail.com",
}
]
现在,我想要返回的是申请人数组中不包含电子邮件"steven@gmail.com"
或no applicants array
的任何文件。
在上面的示例JSON中,它应该返回employer1
和employer2
的文档。
我已将文件归还给申请人steven@gmail.com does not exist
,雇主1,但我不明白我如何也可以包括employer3
。我怎么能这样做?
这是我目前在JavaScript中的查询:
collection.find({"applicants.email" : {$ne : req.user.username}}, {}, function(e,docs){
res.json(docs);
console.log(docs);
});
答案 0 :(得分:1)
尝试以下查询,这可能会对您有所帮助: -
有关如何使用它的更多信息,请参阅$size。
如果applicants.email
不等于req.user.username
或applicants
数组大小为0,则此查询将返回结果。
collection.find({$or:[
{"applicants.email" : {$ne : req.user.username}},
{applicants: {$size: 0}}
}], function(e,docs){
console.log(docs);
});
我从未尝试过查询。如果它有任何错误,请告诉我。
你也可以尝试这个: -
如果applicants.email
不等于req.user.username
或者如果applicants
数组不存在,此查询将返回结果。
collection.find({$or:[
{"applicants.email" : {$ne : req.user.username}},
{applicants: {$exists: false}}
}], function(e,docs){
console.log(docs);
});
有关详细信息,请参阅$exists。
希望它会有所帮助。
答案 1 :(得分:0)
试试这个:
collection.find({applicants: {$not: {$size: 0}}},function(err,data){
if(err){
console.log(err);
}
else{
console.log("Applicats Array Where size is not zero:");
console.log(data);
}
});
答案 2 :(得分:0)
只需尝试此查询,$nin
对此条件非常有用
collection.find({"applicants.email" : {$nin:["steven@gmail.com"]}}, {}, function(e,docs){
res.json(docs);
console.log(docs);
});