2017-01-30 47 views
0

我在集合中有一個布爾型字段,我想查詢該字段值爲false的所有記錄。 此查詢的最佳設計(性能)是什麼? 該字段是否應該保存布爾值true/false?真/空(存在= FALSE)?或者也許它有更好的字符串類型的性能..保存字符串/空字符串或字符串/ null(存在= false)? 我應該使用哪個索引?通過布爾型字段查詢mongo集合

回答

0

如果它是真/假,最好將它存儲爲布爾類型。 JSON支持布爾類型。不建議使用它作爲字符串「true」/「false」,因爲它可以作爲字符串可以具有「TRUE」/「FALSE」或「True」/「False」,所有這些都增加了查詢的負擔。由於它是一個字符串,因此在該字段中存在髒數據的風險。

如果您在查詢{'field':null}中檢查null,它將包含字段不存在或字段值實際上爲null的情況。否則,如果你只是想得到該領域不存在的地方,那麼使用$ exists {'field' : {$exists : false}}。不用說,{'field':true}一樣{'field' : {$exists : true}}

如果你要考慮非現有字段爲假,並希望包括邏輯,也許這是最好的檢查與$ NE-{'field' : {$ne : true}}。但是MongoDB的建議$或而非消極的查詢,所以像{$or : [{'field':null},{'field':false}]}

所有這些都可以通過保持它作爲一個字符串也可以做,但隨後會有額外的負擔,特別是如果你正在運行一個腳本來使一個字符串比較比布爾比較更不可靠。

回到索引,索引不能很好地與布爾類型一起工作,因爲沒有太多的要分離的數據,但即使它是字符串它不會添加任何咬合,因爲最終它將不得不基於只有兩個(或三個)值。所以我沒有看到任何比較優勢。