2014-11-08 44 views
0

读取行当发现不删除的行,我用下面的过滤器:MongoDB中如何使用缺少财产

DBCursor myCursor=collection.find(new BasicDBObject("companyId",companyId) 
.append("isDeleted",Boolean.FALSE)) 

的问题是,一些记录不具有“请将isDeleted”一栏,所以(我假设)这就是他们没有出现在列表中的原因
如何使用isDeleted = false包含这两个记录
并记录isDeleted属性缺失的位置?

回答

1

你基本上想要$exists运算符。但是,可能再加上$or运营商既包括可能的值,其中一套或根本不存在:

BasicDBList myOr = new BasicDBList(); 
    myOr.add(new BasicDBObject("isDeleted", false)); 
    myOr.add(new BasicDBObject("isDeleted", new BasicDBObject("$exists", false))); 


    DBObject query = new BasicDBObject("companyId",1) 
     .append("$or", myOr); 

    DBCursor myCursor = collection.find(query); 

的“$存在”主要是让指定的字段是否“存在与否”取决于true|false值你指定为参数。请注意0​​不询问索引。您最好的选择是确保每个文档实际上都有一个可以查询的值。