2012-12-21 31 views
12

Bộ sưu tập: progsvấn đề MongoDB trong java với giới hạn và sắp xếp

{ "_id" : "ABC", "defaultDirectory" : "abc", "defaultRecvDirectory" : "abc" } 
{ "_id" : "RAS", "defaultRecvDirectory" : "recv/ras" } 
{ "_id" : "SND", "defaultSendDirectory" : "send/snd" } 

Trong Mongo console:

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

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

Trong 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" } 

Ai đó có thể giải thích sự khác biệt?

Trả lời

25

Hủy bỏ các dấu ngoặc kép từ "-1" trong sắp xếp của bạn:

DBCursor cursor = collection.find(query).sort(new BasicDBObject("_id",-1)).limit(1); 
0

Dưới đây là giải pháp mà tôi tìm thấy với các bộ lọc, phân loại và giới hạn:

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>()); 

bạn sẽ nhận được danh sách các tài liệu hiện nay bạn có thể chơi với nó theo bạn.

1

Phiên bản khác dựa trên 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()); 
} 
Các vấn đề liên quan