使用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
.
除非我做错了什么,否则这似乎是 MongoDB Java 驱动程序中的一个错误,即使它也可能与Fongo
我使用它来测试它有关。
关于发生了什么的任何想法?
编辑
这是由上面显示的包含排序的查询生成的:
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
和第二次使用$orderby
(如此处建议:http: //docs.mongodb.org/manual/reference/operator/meta/orderby/#op._S_orderby)