Mongodb $存在$或

时间:2013-12-20 12:31:07

标签: mongodb

假设我有以下文件集名为学生

{name:'John',age:16,address:'New Orleans',subject:'Maths'}

{name:'John',age:18,subject:'Maths'}

现在,如果我想查询主题是数学的文档,地址是“新奥尔良”或者它不存在那么:

db.students.find({subject:'Maths',$or:[{address:{$exists:false}},{address:'New Orleans'}]})

但是在做上述查询时,我只得到一个地址为“新奥尔良”而不是另一个地址我没有地址字段

我做错了什么?任何帮助表示赞赏。

修改

此问题已得到解决。 不是查询问题。感谢大家的帮助。

2 个答案:

答案 0 :(得分:0)

您可能需要参考此问题Mongo $exists query does not return correct documents

问题可能是您正在使用查询的索引(您可以使用.explain()检查)和索引不索引空字段,因此它不会返回没有它的记录。

您可以使用

进行检查

db.students.find({subject:'Maths',$or:[{address:{$exists:false}},{address:'New Orleans'}]}).hint({$natural:1})

将执行表扫描而不是使用索引(再次,如果您使用索引)

答案 1 :(得分:0)

我遇到了什么问题。

基本上是address字段意外更新为空字符串“”的文档之一。因为我没有在$or中查询它,所以我的搜索结果没有反映出来。更新了我的查询以包含importType:“”,现在它工作正常。

谢谢大家的帮助。