6

MongoDB コンソールを使用すると、次のような並べ替えで個別のキーを使用して、ネイティブの MongoDB クエリを作成できます。

db.mycollection.distinct('mykey').sort('mykey', 1)

Java ドライバーを使用すると、次のように同じクエリを記述できると予想されます。

myCollection.distinct("myKey").sort(new BasicDBObject("myKey", 1));

ただし、のような型ではなく型をDBCollection#distinct()返すため、これは機能しません。ListDBCursorDBCollection#find()

Java ドライバーを使用して、並べ替えを使用して個別のクエリを作成するにはどうすればよいですか?

4

2 に答える 2

14

distinctMongoDB は、コマンドによるサーバー側の並べ替えをサポートしていません。コンソールで何が起こっているかというと、distinct('myKey')呼び出しsortによって配列が返され、その配列に対して並べ替えられたバージョンの配列を返す JavaScript メソッドを呼び出すということです。渡すパラメーターsortは無視されます。

Java で同等のことを行うには、次のようにします。

List myKeys = myCollection.distinct("myKey");
java.util.Collections.sort(myKeys);

サーバー側の並べ替えを使用して一意のキーを取得するには、aggregate. シェルでこれを行う方法は次のとおりです。

db.mycollection.aggregate([
    { $group: {_id: '$myKey' }},
    { $sort: {_id: 1}}
])

ただし、これをテストしたところ、単純なクライアント側の並べ替えアプローチのパフォーマンスがはるかに優れていました。

于 2013-08-28T03:28:48.360 に答える