Подтвердить что ты не робот

Mongodb проблема в 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"}}).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" }

Кто-то может объяснить разницу?

4b9b3361

Ответ 1

Удалите кавычки из "-1" в вашем роде:

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

Ответ 2

Другая версия, основанная на 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());
}

Ответ 3

Вот решение, которое я нашел с фильтрами, сортировкой и ограничением:

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

вы получите список документов, которые вы можете играть с ним в соответствии с вами.