我在集合中有一个布尔字段,我想查询该字段值为false的所有记录。 此查询的最佳设计(性能)是什么? 这个字段应该保存布尔值true / false吗?真/空(存在= FALSE)?或者它可能具有更好的String类型性能..保存String / Empty String或String / null(exists = false)? 我应该使用哪个索引?
答案 0 :(得分:0)
如果它是真/假,最好将其存储为布尔类型。 JSON支持布尔类型。将它用作字符串" true" /" false"不推荐,因为字符串可以有" TRUE" /" FALSE"或" True" /" False",所有这些都会增加查询的负担。在该字段中存在脏数据的风险,因为它是一个字符串。
如果在查询{'field':null}
中检查为空,则它包括字段不存在或字段值实际为空的位置。否则,如果您只想获得该字段所在的位置,请使用$ exists {'field' : {$exists : false}}
。不用说{'field':true}
不与{'field' : {$exists : true}}
相同
如果您想将非现有字段视为false并希望包含该逻辑,可能最好使用$ ne- {'field' : {$ne : true}}
进行检查。但是,MongoDB建议使用$或者而不是否定查询,例如{$or : [{'field':null},{'field':false}]}
所有这些都可以通过将它保持为字符串来完成,但是会有额外的负担,特别是如果你运行一个脚本来进行字符串比较,这比布尔比较更不可靠。
回到索引,索引在布尔类型上运行得不是很好,因为没有太多可以隔离数据,但即使它的字符串它也不会添加任何东西,因为最终它必须仅基于两个(或三个)值进行索引。所以我没有看到任何比较优势。