如何find文档中是否存在元素 – MongoDB?

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

例如,下面是我的一个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); }); 

尝试下面的查询,这可能会帮助你: –

有关如何使用它的更多信息,请参阅$ 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或者不存在应用程序数组,则此查询将返回结果。

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

请参阅$存在的更多信息。

希望它会有所帮助。

尝试这个:

 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); } }); 

试试这个查询, $nin对于这个条件是有用的

 collection.find({"applicants.email" : {$nin:["steven@gmail.com"]}}, {}, function(e,docs){ res.json(docs); console.log(docs); });