java中带有限制和排序的mongodb问题

java中带有限制和排序的mongodb问题,mongodb,mongo-java,Mongodb,Mongo Java,收藏:progs { "_id" : "ABC", "defaultDirectory" : "abc", "defaultRecvDirectory" : "abc" } { "_id" : "RAS", "defaultRecvDirectory" : "recv/ras" } { "_id" : "SND", "defaultSendDirectory" : "send/snd" } 在mongo控制台中: db.progs.find({"_id":{"$lt":"ZZZZZZZZZ"}

收藏:progs

{ "_id" : "ABC", "defaultDirectory" : "abc", "defaultRecvDirectory" : "abc" }
{ "_id" : "RAS", "defaultRecvDirectory" : "recv/ras" }
{ "_id" : "SND", "defaultSendDirectory" : "send/snd" }
在mongo控制台中:

db.progs.find({"_id":{"$lt":"ZZZZZZZZZ"}}).sort({"_id":-1}).limit(1);

==>    { "_id" : "SND", "defaultSendDirectory" : "send/snd" }
在Java中:

    BasicDBObject query = new BasicDBObject();
    query.put("_id", new BasicDBObject("$lt", "ZZZZZZZZZZ"));
    DBCursor cursor = collection.find(query).sort(new BasicDBObject("_id","-1")).limit(1);
    for (DBObject dbObject : cursor) {
        System.out.println(dbObject);
    }

==>    { "_id" : "ABC", "defaultSendDirectory" : "abc", "defaultRecvDirectory" : "abc" }

有人可以解释这种差异吗?

删除您排序中
“-1”
中的引号:

DBCursor cursor = collection.find(query).sort(new BasicDBObject("_id",-1)).limit(1);
或者使用
com.Mongodb.operation.OrderBy
中的Mongodb ASC/DESC常量,而不是硬编码1/-1

例如:

DBCursor cursor = collection.find(query).sort(new BasicDBObject("_id", OrderBy.DESC.getIntRepresentation())).limit(1);

以下是我通过过滤器、排序和限制找到的解决方案:

 List<Bson> queryFilters = new ArrayList<>();
    queryFilters.add(Filters.eq(SavedReportEntity.FIELD_USER_ID, userId));

   List<Document> documents = getMongoCollection().find(searchFilter).sort(sort).limit(10).into(new ArrayList<Document>());
List queryFilters=new ArrayList();
添加(Filters.eq(SavedReportEntity.FIELD_USER_ID,userId));
List documents=getMongoCollection().find(searchFilter).sort(sort).limit(10).into(new ArrayList());

您现在将获得文档列表,您可以根据自己的喜好使用它。

基于MongoTemplate的另一个版本:

public List<?> findLimitedSorted(Query query, Object target, String startFrom) {
    query.limit(100);
    query.with(new Sort(Sort.Direction.ASC, "<field_name>"));
    return getMongoTemplate().find(query, target.getClass());
}
公共列表findLimitedSorted(查询、对象目标、字符串起始){
查询.限额(100);
query.with(新排序(Sort.Direction.ASC,“”);
返回getMongoTemplate().find(查询,target.getClass());
}

从MongoDB获取具有排序顺序的DBObjects:

List<DBObject> list = new LinkedList<DBObject>();    
    DBCursor cursor = db.getCollection("myCol").find().sort(new BasicDBObject("_id",-1)).limit(collection.find(query).count());
        while(cursur.hasNext){
        list.add(cursur.next());
    }
    if(!list.isEmpty())
        for(DBObject dbo: list){
            System.out.println(dbo);
        }
    else
        System.out.println("List is empty");
List List=newlinkedlist();
DBCursor cursor=db.getCollection(“mycl”).find().sort(新的BasicDBObject(“\u id”,-1)).limit(collection.find(query.count());
while(cursur.hasNext){
list.add(cursur.next());
}
如果(!list.isEmpty())
for(DBObject dbo:list){
系统输出打印LN(dbo);
}
其他的
System.out.println(“列表为空”);

如果您能添加一些解释,那就太好了。这是正确的答案。始终在查询中排序,而不是在查询之后!