我们在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
,而是比较它们的第一个元素(包括它的类型)。如果使用相等ObjectId
。但根据类型顺序,内部MinKey
应该在null
之前。
那么MongoDb如何在实际中排序价值呢?
P.S。由于mongo是开源的,因此答案应该在这里:https://github.com/mongodb/mongo/tree/master