【发布时间】:2017-06-29 12:13:06
【问题描述】:
我正在尝试检查我的集合以返回文档中数组元素为特定值的所有文档。
例如,这是我的 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);
});
【问题讨论】:
-
使用 $elemMatch 在这样的数组中查找对象
{ applicants:{ $elemMatch: { email :{ $ne:req.user.email }}}} -
这似乎不起作用,它返回 []。如果我将 "applicants" : [] 添加到我的文档中,我的原始查询可以工作,但我认为我不应该添加一个空白数组来让这个工作正常吗?
-
嗯,很奇怪,我现在无法测试。然后尝试像
{ $or: [{"applicants: $or: [{ $exists: false}, {$size: 0}] ,{"applicants.email" : {$ne : req.user.username}]}这样的原始查询,这应该返回申请者数组不存在或为空或电子邮件不是 req.user.username 的文档
标签: javascript node.js mongodb nosql