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

Fra*_*nck 14 mongodb mongo-java

收藏:progs的

{ "_id" : "ABC", "defaultDirectory" : "abc", "defaultRecvDirectory" : "abc" }
{ "_id" : "RAS", "defaultRecvDirectory" : "recv/ras" }
{ "_id" : "SND", "defaultSendDirectory" : "send/snd" }
Run Code Online (Sandbox Code Playgroud)

在mongo控制台中:

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

==>    { "_id" : "SND", "defaultSendDirectory" : "send/snd" }
Run Code Online (Sandbox Code Playgroud)

在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" }
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这个区别吗?

Joh*_*yHK 29

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

DBCursor cursor = collection.find(query).sort(new BasicDBObject("_id",-1)).limit(1);
Run Code Online (Sandbox Code Playgroud)

或者使用Mongodb ASC/DESC常量com.mongodb.operation.OrderBy而不是硬编码1/-1

例:

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


小智 5

另一个基于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());
}
Run Code Online (Sandbox Code Playgroud)