假设我有集合 foo:
> db.foo.find()
{ "_id" : ObjectId("5076865a72da558dd40c819d"), "a" : 1, "b" : 5 }
{ "_id" : ObjectId("5076866f5c70b3b37c048494"), "a" : 2, "b" : 4 }
{ "_id" : ObjectId("5076866f5c70b3b37c048495"), "a" : 3, "b" : 6 }
{ "_id" : ObjectId("507686835c70b3b37c048496"), "a" : 0, "b" : 4 }
我想按 排序b
,然后按a
:
> db.foo.find().sort({b:-1,a:-1})
{ "_id" : ObjectId("5076866f5c70b3b37c048495"), "a" : 3, "b" : 6 }
{ "_id" : ObjectId("5076865a72da558dd40c819d"), "a" : 1, "b" : 5 }
{ "_id" : ObjectId("5076866f5c70b3b37c048494"), "a" : 2, "b" : 4 }
{ "_id" : ObjectId("507686835c70b3b37c048496"), "a" : 0, "b" : 4 }
显然,传递给 sort() 的哈希保留了键的顺序:
> db.foo.find().sort({a:-1,b:-1})
{ "_id" : ObjectId("5076866f5c70b3b37c048495"), "a" : 3, "b" : 6 }
{ "_id" : ObjectId("5076866f5c70b3b37c048494"), "a" : 2, "b" : 4 }
{ "_id" : ObjectId("5076865a72da558dd40c819d"), "a" : 1, "b" : 5 }
{ "_id" : ObjectId("507686835c70b3b37c048496"), "a" : 0, "b" : 4 }
我需要的是在使用 mongoosejs 作为 DB 包装器的 Node.js 应用程序中复制这种行为。我知道我可以使用一个排序参数
Foo.find({},[],{sort:{b:-1}}, callback)
有两个参数让我感到困惑,Foo.find({},[],{sort:{b:-1, a:-1}}, callback)
并Foo.find({},[],{sort:{a:-1, b:-1}}, callback)
以相同的顺序(按 排序a
)返回元素 - 因为它应该,因为显然哈希/对象没有键顺序。
我知道你可以传递数组(例如['b','a']
),但我仍然不确定如何设置反向顺序:['-b','-a']
虽然被 mongoosejs 识别,但按直接顺序排序。