我在一个Parse实体上有一个Boolean
列,我想查询所有具有此列的行,这些行要么显式设置为false
,要么保留其默认undefined
值。
我无法执行equalTo('myBoolColumn', false)
,因为它不会返回该列具有undefined
值的行。
我宁愿不做notEqualTo('myBoolColumn', true)
,因为Parse documentation指出notEqualTo
查询效率不高,因为它们无法利用索引。
该文档建议改用containedIn
,但编写containedIn('myBoolColumn', [false, undefined])
查询以实现预期结果感觉不对。
看来notEqualTo
bool 查询仍然可以建立索引,但是我没有找到可以证实这一点的权威信息,而且我不知道如何测试该查询是否使用索引。
所以我应该使用哪一个:notEqualTo('myBoolColumn', true)
或containedIn('myBoolColumn', [false, undefined])
?
最佳答案
您想像这样结合两个查询:
var falseQuery = new Parse.Query('YourClass');
falseQuery.equalTo('myBoolColumn', false);
var undefinedQuery = new Parse.Query('YourClass');
undefinedQuery.doesNotExist('myBoolColumn');
//this is the query you should run
var query = Parse.Query.or(falseQuery, undefinedQuery);
query.find({....});