0

コレクション 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 アプリケーションでこの動作を複製することです。私は、1つの並べ替えパラメーターで使用できることを知っています

Foo.find({},[],{sort:{b:-1}}, callback)

2 つのパラメーターがあると、両方として混乱し、要素を同じ順序 ( でソート) で返しFoo.find({},[],{sort:{b:-1, a:-1}}, callback)ます。明らかに、ハッシュ/オブジェクトにはキーの順序がないためです。Foo.find({},[],{sort:{a:-1, b:-1}}, callback)a

配列(例: )を渡すことができることは知っていますが['b','a']、逆順を設定する方法がまだわかりません:['-b','-a']、mongoosejsによって認識されていますが、直接の順序でソートされます。

4

1 に答える 1

1

Mongoose 3.xでは、文字列をQuery#sortに渡して、次のことを行うことができます。

Foo.find().sort('-b -a').exec(callback);
于 2012-10-11T12:28:19.767 に答える