我们在 Ubuntu 12.04 机器上本地使用 MongoDB 2.4.9。我们将以下查询放入 mongo 控制台(db.a 是一个空集合):
> db.a.insert({'a': null})
> db.a.insert({'a': [null]})
> db.a.insert({'a': null})
> db.a.insert({'a': []})
> db.a.insert({'a': [[]]})
> db.a.find().sort({'a': 1})
{ "_id" : ObjectId("52de6dd4ff91f5efcb1efacc"), "a" : [ ] }
{ "_id" : ObjectId("52de6dbaff91f5efcb1efac9"), "a" : null }
{ "_id" : ObjectId("52de6dbeff91f5efcb1efaca"), "a" : [ null ] }
{ "_id" : ObjectId("52de6dc8ff91f5efcb1efacb"), "a" : null }
{ "_id" : ObjectId("52de6debff91f5efcb1efacd"), "a" : [ [ ] ] }
我们遵循http://docs.mongodb.org/manual/reference/method/cursor.sort将类型的顺序设置为:
MinKey (internal type)
Null
Numbers (ints, longs, doubles)
Symbol, String
Object
Array
...
所以我希望结果是:
null
null
[]
[null]
[[]]
基于另外几个查询,我们假设array
比较它们的第一个元素而不是 s(包括它的类型)。在相等ObjectId
的情况下使用。但根据类型顺序,除了内部MinKey
应该在之前null
。那么MongoDb在现实中是如何排序值的呢?
PS由于mongo是开源的,答案应该在这里:https ://github.com/mongodb/mongo/tree/master