假设我有以下文件集名为学生
{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'}]})
但是在做上述查询时,我只得到一个地址为“新奥尔良”而不是另一个地址我没有地址字段
我做错了什么?任何帮助表示赞赏。
修改
此问题已得到解决。 不是查询问题。感谢大家的帮助。
答案 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:“”,现在它工作正常。
谢谢大家的帮助。