MongoDB中$minKey、MaxKey的含义及$gt/$lt比较查询使用疑问
MongoDB中$minKey与MaxKey的使用说明
基础含义
$minKey和MaxKey都是MongoDB BSON协议定义的特殊边界值,仅用于比较逻辑,不承载实际业务数据:
- $minKey是所有BSON类型中排序优先级最低的值,任何其他类型的BSON值(包括null、数字、字符串、日期等)的排序优先级都高于$minKey
- MaxKey()是所有BSON类型中排序优先级最高的值,任何其他类型的BSON值的排序优先级都低于MaxKey
常见作用
这两个值一般不会在普通业务文档中使用,主要适用场景是MongoDB内部逻辑或者特殊架构需求:
比如分片集群的chunk范围划分,会用$minKey作为分片键的下限、MaxKey作为分片键的上限,标记某一个分片chunk负责的全部数据范围,避免边界值遗漏。
比较查询规则
你提到的用$lt、$gt和普通值做比较查询是完全支持的,符合MongoDB的BSON排序规则:
举个例子,假设你的集合有以下4条文档:
{ "date": new Date(1393804800000), "grade": MaxKey(), "score": 2 }, { "grade": "a", "score": 3 }, { "grade": "z", "score": 4 }, { "grade": { "$minKey": 1 }, "score": 1 }
执行你给出的查询语句db.test.find({"grades.grade": {"$gt":"a"}}),会返回grade为"z"和grade为MaxKey()的两条文档,因为MaxKey的排序优先级高于所有字符串。
如果执行db.test.find({"grades.grade": {"$lt":"a"}}),会返回grade为$minKey的文档,因为$minKey的排序优先级低于所有字符串。
如果你需要专门匹配字段值为$minKey或MaxKey的文档,可以用专用查询语法:
- 匹配$minKey:
db.test.find({ grade: { $minKey: 1 } }) - 匹配MaxKey:
db.test.find({ grade: { $maxKey: 1 } })
内容的提问来源于stack exchange,提问作者xiaoyu yang
相关产品推荐
相关产品推荐

