如何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例子中,它应该返回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); });
尝试下面的查询,这可能会帮助你: –
有关如何使用它的更多信息,请参阅$ 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
或者不存在应用程序数组,则此查询将返回结果。
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); });