4

我们在 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

4

0 回答 0