类型包围是MongoDB应用于查询谓词的隐式过滤:给定BSON类型的比较仅匹配该类型的值。示例,{ a: { $gt: 0 } } 表示“a 是数字,a 大于 0”。
哪些操作符键入括号
不等式操作符($gt、$gte、$lt 和 $lte)使用类型括号。
否定词( $ne 和 $nin )不使用类型括号。它们匹配任何类型的值。示例,除了比较中的数字类型之外,{ a: { $ne: 2 } } 还匹配 a 为字符串或对象的文档。
用于数字比较的类型范围
BSON有几种数字类型:int、long、double 和 decimal。 MongoDB将它们视为等效值进行比较,因此针对数字的比较会匹配任何数字类型的值。
示例,{ a: { $gt: 0 } } 匹配 int、long、double 或 decimal 类型的 a 值。
类型范围和隐式数组遍历
当比较隐式遍历大量时,类型括号也适用。如果目标字段是大量,则比较匹配至少有一个元素满足比较且与操作数类型相同的文档。
示例,{ a: { $gt: 3 } } 匹配 { a: [ 1, 2, 3, 4 ] } 和 { a: [ "red", 4, "blue" ] },但不匹配 { a: [ "red", "blue" ] }。
例子
考虑以下集合:
{ "_id": "apples", "qty": 5 } { "_id": "bananas", "qty": 7 } { "_id": "apricots", "qty": 3 } { "_id": "oranges", "qty": { "in stock": 8, "ordered": 12 } } { "_id": "avocados", "qty": "fourteen" }
以下查询使用 $gt 返回 qty 值大于 4 值的文档:
db.inventory.find( { qty: { $gt: 4 } } )
[ { _id: 'apples', qty: 5 }, { _id: 'bananas', qty: 7 } ]
_id 等于 "apricots" 的文档不会返回,因为其 qty 值 3 不大于 4。
_id 等于 "avocados" 的文档不会返回,因为其 qty 值的类型为 string,而 $gt 操作数的类型为 integer。
不返回_id等于"oranges"的文档,因为其qty值的类型为object。