を使用しているときに、クエリを機能させることができませんでしたsort
。クエリの結果は、 を使用していない場合とまったく同じであると期待していますが、sort
結果はもちろんソートされている必要がありますが、 を使用するsort
と何も返されません。
問題を再現する完全な例を次に示します。
DB db = fongo.getDB( "something" );
DBCollection collection = db.getCollection( "what" );
collection.insert( new BasicDBObject( "hello", 4 ) );
collection.insert( new BasicDBObject( "hello", 2 ) );
collection.insert( new BasicDBObject( "hello", 1 ) );
collection.insert( new BasicDBObject( "hello", 3 ) );
final DBCursor sorted = collection
.find( new BasicDBObject( "hello", new BasicDBObject( "$exists", true ) ) )
.sort( new BasicDBObject( "hello", 1 ) )
.limit( 10 );
final DBCursor notSorted = collection
.find( new BasicDBObject( "hello", new BasicDBObject( "$exists", true ) ) )
.limit( 10 );
// both asserts below work!
assertThat( notSorted.size(), is( 4 ) );
assertThat( sorted.size(), is( 4 ) );
List<DBObject> notSortedAsList = notSorted.toArray();
List<DBObject> sortedAsList = sorted.toArray();
assertThat( notSortedAsList.size(), is( 4 ) );
assertThat( sortedAsList.size(), is( 4 ) ); // << BREAKS HERE!!!!
assertThat( sortedAsList.stream().map( obj -> obj.get( "hello" ) )
.collect( Collectors.toList() ), is( Arrays.asList( 1, 2, 3, 4 ) ) );
ご覧のとおり、notSortedAsList
リストには予想どおり 4 つの要素が含まれていますが、sortedAsList
空です!! 唯一の違いは、後者が を含むクエリから作成されたことですsort
。
Fongo
私が何か間違ったことをしていない限り、これはMongoDB Javaドライバーのバグである可能性がありますが、これをテストするために使用しているため、関連する可能性もあります.
何が起こっているかについてのアイデアはありますか??
編集
これは、上記の並べ替えを含むクエリによって生成されるものです。
find({ "query" : { "hello" : { "$exists" : true}} , "orderby" : { "hello" : 1}}, null).skip(0).limit(10)
がないsort
場合、クエリは次のようになります。
find({ "hello" : { "$exists" : true}}, null).skip(0).limit(10)
また、次のクエリを実行してみました。
final DBCursor sorted = collection
.find( new BasicDBObject( "hello", new BasicDBObject( "$exists", true ) ) )
.addSpecial( "$orderby", new BasicDBObject( "hello", 1 ) )
.limit( 10 );
生成されたクエリは次のとおりです。
find({ "$orderby" : { "hello" : 1} , "query" : { "hello" : { "$exists" : true}}}, null).skip(0).limit(10)
どちらも同じ結果になりますが、最初の使用orderby
と 2 番目の使用は同じです$orderby
(ここで提案されているように: http://docs.mongodb.org/manual/reference/operator/meta/orderby/#op._S_orderby ) 。