8
db.jason.find().sort({"rank":1})

{ "_id" : ObjectId("51ae517372779b7eeeb81342"), "name" : "jason" }
{ "_id" : ObjectId("51ae517372779b7eeeb81343"), "name" : "jason" }
{ "_id" : ObjectId("51ae513772779b7eeeb8133a"), "name" : "jason", "rank" : 0 }
{ "_id" : ObjectId("51ae513772779b7eeeb8133b"), "name" : "jason", "rank" : 1 }
{ "_id" : ObjectId("51ae513772779b7eeeb8133c"), "name" : "jason", "rank" : 2 }

我希望没有排名的文档能够结束排序而不是开始排序......但也要保持排名的项目按升序排列。这是可能的还是我应该使用字符串或高数字(如 99999)默认为空?

4

1 回答 1

8

返回结果时db.jason.find().sort({"rank":1}),MongoDB 将按“rank”类型对文档进行排序,然后按“rank”值排序。出于排序顺序的目的,MongoDB 将缺少字段的文档视为该字段的 NULL 类型。NULL 类型在数字类型之前排序,并且不能更改(有关内置类型排序顺序,请参见http://docs.mongodb.org/manual/reference/method/cursor.sort/ )。我建议改为构建两个查询(一个用于包含“rank”的文档,一个用于没有“rank”的文档)并将结果合并到您的应用程序中。但是,如果您需要保留此单个查询,则需要在所有文档中设置“排名”以生成您想要的顺序(例如,

于 2013-06-05T23:10:25.560 回答