コレクション 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によって認識されていますが、直接の順序でソートされます。