在mongoosejs中有几个参数的Mongodb .sort相当于什么?

时间:2012-10-11 09:03:05

标签: mongodb mongoose

假设我有收集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识别,但是按直接顺序排序。

1 个答案:

答案 0 :(得分:1)

在Mongoose 3.x中,您可以将一个字符串传递给Query#sort来执行此操作:

Foo.find().sort('-b -a').exec(callback);