我试图检查我的集合以返回所有文档,其中文档中的数组元素是某个值。
例如,这里是我的一个文档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中,它应该返回employer1employer2的文档。
我已经尽可能地退回了申请人的文件,所以雇主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.usernameapplicants数组大小为0,则此查询将返回结果。

collection.find({$or:[
                     {"applicants.email" : {$ne : req.user.username}},
                     {applicants: {$size: 0}}
                 }], function(e,docs){
        console.log(docs);
});

我从没试过这个问题。如果有任何错误,请告诉我。
你也可以试试这个:
如果applicants.email不等于req.user.usernameapplicants数组不存在,则此查询将返回结果。
 collection.find({$or:[
                     {"applicants.email" : {$ne : req.user.username}},
                     {applicants: {$exists: false}}
                 }], function(e,docs){
        console.log(docs);
});

有关更多信息,请参阅$exists
希望能有所帮助。

09-11 19:56