通过布尔字段查询mongo集合

Posted

技术标签:

【中文标题】通过布尔字段查询mongo集合【英文标题】:Querying mongo collection by boolean field 【发布时间】:2017-06-15 11:26:12 【问题描述】:

我在集合中有一个布尔字段,我想查询该字段值为假的所有记录。 此查询的最佳设计(性能)是什么? 该字段是否应保存布尔值 true/false?真/空(存在=假)?或者它可能对字符串类型有更好的性能.. 保存字符串/空字符串或字符串/null(exists=false)? 我应该使用哪个索引?

【问题讨论】:

【参考方案1】:

如果是真/假,最好将其存储为布尔类型。 JSON 支持布尔类型。不建议将其用作字符串“true”/“false”,因为它可以具有“TRUE”/“FALSE”或“True”/“False”,所有这些都增加了查询的负担。该字段存在脏数据的风险,因为它是一个字符串。

如果您在查询'field':null 中检查null,它包括字段不存在或字段值实际上为null 的位置。否则,如果您只想获取该字段不存在的位置,请使用 $exists 'field' : $exists : false。不用说'field':true'field' : $exists : true相同

如果您想将不存在的字段视为 false 并希望包含该逻辑,则最好使用 $ne-'field' : $ne : true 进行检查。但是 MongoDB 建议使用 $or 而不是否定查询,例如 $or : ['field':null,'field':false]

所有这些事情都可以通过将其保留为字符串来完成,但是会有额外的负担,特别是如果您正在运行脚本来进行比布尔比较更不可靠的字符串比较。

回到索引,索引不适用于布尔类型,因为没有太多需要隔离的数据,但即使它是字符串,它也不会添加任何内容,因为最终它必须仅基于索引两个(或三个)值。所以我没有看到任何比较优势。

【讨论】:

以上是关于通过布尔字段查询mongo集合的主要内容,如果未能解决你的问题,请参考以下文章

mongo联集合查询

Mongo 查询(可视化工具)

NodeJS/Mongo:通过各种集合循环查询

java如何实现mongodb中查询指定字段?

基于正则表达式排除 Mongo 字段

在 C# 中动态查询 Mongo 集合