2015-08-24 23 views
5

我在我的一個Parse實體上有一個Boolean列,我想要查詢所有具有此列的行,顯式設置爲false,或者保留爲其缺省undefined值。如何在Parse中進行高效的布爾型「false或undefined」查詢?

我不能這樣做equalTo('myBoolColumn', false),因爲它不會返回具有此列的undefined值的行。

我寧可不做notEqualTo('myBoolColumn', true),因爲Parse documentation指出notEqualTo查詢效率不高,因爲它們無法利用索引。

該文檔建議改爲使用containedIn,但寫入containedIn('myBoolColumn', [false, undefined])查詢以達到預期結果感覺不對。

看起來像notEqualTo布爾查詢仍然可以索引,但我沒有找到一個權威的來源,證實了這一點,我不知道如何測試這個查詢是否使用索引或不。

那麼,我應該使用哪一個:notEqualTo('myBoolColumn', true)containedIn('myBoolColumn', [false, undefined])

+0

這有什麼錯的if/else條件。如果是的話做一些事情,否則它是錯誤的或未定義的 – soulshined

+0

我在寫一個查詢,而不是代碼。 –

+1

是的。您爲一個特定參數(equalTo('',true))編寫查詢)。如果它不匹配該參數,那麼它自然是錯誤的,未定義的對象 – soulshined

回答

6

你想合併這兩個查詢,像這樣:

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({....}); 
+0

謝謝,我會試一試,並留意我的Parse控制檯中的_Slow Queries_ analytics頁面。 –

+0

你介意標記爲正確嗎?這是正確執行此操作的解析方式。會真的很感激它。 – AlexKoren

2

既然你檢查它是否是虛假的或不確定的,你也可以更簡單地做:

var query = new Parse.Query('YourClass'); 
query.notEqualTo('myBoolColumn', true); 

query.find({...}); 
+0

謝謝,但我明確表示,我寧願不要在我的問題中做一個'notEqualTo'。 –

+0

@PascalBourque很興奮,我的不好:) – vikMage

相關問題