【发布时间】:2020-04-06 16:45:29
【问题描述】:
我正在阅读MongoDB BSON Comparison docs。
但是我没看清楚。
在比较不同 BSON 类型的值时,MongoDB 使用以下比较顺序,从低到高:
- MinKey(内部类型)
- 空
- 数字(整数、长整数、双精度、小数)
- 符号、字符串
...
是否有任何隐式类型转换以及它是如何工作的?
你能举几个例子吗?
【问题讨论】:
我正在阅读MongoDB BSON Comparison docs。
但是我没看清楚。
在比较不同 BSON 类型的值时,MongoDB 使用以下比较顺序,从低到高:
- MinKey(内部类型)
- 空
- 数字(整数、长整数、双精度、小数)
- 符号、字符串
...
是否有任何隐式类型转换以及它是如何工作的?
你能举几个例子吗?
【问题讨论】:
没有类型转换。
当比较两个项目时:
试试:
> db.foo.insertMany([{a:1},{a:[]},{a:'1'},{a:{}},{a:true},{a:false},{a:/test/},{a:null},{a:[1]}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5e8aeae7d11542e71728da71"),
ObjectId("5e8aeae7d11542e71728da72"),
ObjectId("5e8aeae7d11542e71728da73"),
ObjectId("5e8aeae7d11542e71728da74"),
ObjectId("5e8aeae7d11542e71728da75"),
ObjectId("5e8aeae7d11542e71728da76"),
ObjectId("5e8aeae7d11542e71728da77"),
ObjectId("5e8aeae7d11542e71728da78"),
ObjectId("5e8aeae7d11542e71728da79")
]
}
> db.foo.find().sort({a: 1})
{ "_id" : ObjectId("5e8aeae7d11542e71728da72"), "a" : [ ] }
{ "_id" : ObjectId("5e8aeae7d11542e71728da78"), "a" : null }
{ "_id" : ObjectId("5e8aeae7d11542e71728da71"), "a" : 1 }
{ "_id" : ObjectId("5e8aeae7d11542e71728da79"), "a" : [ 1 ] }
{ "_id" : ObjectId("5e8aeae7d11542e71728da73"), "a" : "1" }
{ "_id" : ObjectId("5e8aeae7d11542e71728da74"), "a" : { } }
{ "_id" : ObjectId("5e8aeae7d11542e71728da76"), "a" : false }
{ "_id" : ObjectId("5e8aeae7d11542e71728da75"), "a" : true }
{ "_id" : ObjectId("5e8aeae7d11542e71728da77"), "a" : /test/ }
>
空数组的行为似乎与文档不符。
【讨论】: