如何找到文件中是否存在元素 - MongoDB?

时间:2016-06-07 03:36:45

标签: javascript node.js mongodb nosql

我正在尝试检查我的集合以返回文档中数组元素是特定值的所有文档。

例如,这是我的一个文档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中,它应该返回employer1employer2的文档。

我已将文件归还给申请人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);
    });

3 个答案:

答案 0 :(得分:1)

尝试以下查询,这可能会对您有所帮助: -

有关如何使用它的更多信息,请参阅$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.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);
    });