我试图检查我的集合以返回所有文档,其中文档中的数组元素是某个值。
例如,这里是我的一个文档json:
[
{
"employer" : "[email protected]",
"applicants" : [
{
"email" : "[email protected]"
},
{
"email" : "[email protected]"
}
]
},
{
"employer" : "[email protected]",
"applicants" : [
{
"email" : "[email protected]"
}
]
},
{
"employer" : "[email protected]",
}
]
现在,我想要返回的是申请人数组不包含电子邮件
"[email protected]"
或存在no applicants array
的任何文档。在上面的示例json中,它应该返回
employer1
和employer2
的文档。我已经尽可能地退回了申请人的文件,所以雇主1,但我不明白我如何也可以包括
[email protected] does not exist
。我该怎么做?这是我迄今为止在javascript中的查询:
collection.find({"applicants.email" : {$ne : req.user.username}}, {}, function(e,docs){
res.json(docs);
console.log(docs);
});
最佳答案
请尝试以下查询,这可能有助于您:
有关如何使用它的更多信息,请参阅$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。
希望能有所帮助。