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)来默认空的?
答案 0 :(得分:6)
当返回db.jason.find().sort({"rank":1})
的结果时,MongoDB将按“rank”类型排序文档,然后按“rank”值排序。出于排序顺序的目的,MongoDB将缺少字段的文档视为具有该字段的NULL类型。 NULL类型在数字类型之前排序,并且无法更改(有关内置类型排序顺序,请参阅http://docs.mongodb.org/manual/reference/method/cursor.sort/)。我建议改为构造两个查询(一个用于包含“rank”的文档,一个用于没有“rank”的文档)并在应用程序中合并结果。但是,如果您需要保留单个查询,则需要在所有文档中设置“rank”以生成所需的顺序(例如,通过使用具有在数字类型之后排序的类型的sentinel值)。 / p>