Я пытаюсь сохранить версионный контент в базе данных mongo с помощью GridFS. Поэтому я добавляю поле версии в метаданные сохраняемого файла. Все это хорошо работает. Теперь я хочу получить последнюю версию, не зная версии. Здесь: Найдите последнюю версию сохраненного документа в MongoDB - GridFs кто-то упоминает, что findOne всегда возвращает самый молодой (самый последний) файл, если он соответствует запросу. Что есть, чего я хочу. Но когда я пытаюсь это сделать, я всегда получаю первый (самый старый) файл из findOne(). Я использую spring-data-mongodb
версию 1.5.0.RELEASE
Вот мой текущий код:
public void storeFileToGridFs(ContentReference contentReference, InputStream content) {
Integer nextVersion = findLatestVersion(contentReference) + 1;
DBObject metadata = new BasicDBObject();
metadata.put("version", nextVersion);
metadata.put("definitionId", contentReference.getContentDefinitionId());
gridOperations.store(content, contentReference.getContentId().getValue(), metadata);
}
и найти последнюю версию:
private Integer findLatestVersion(ContentReference contentReference) {
Query query = new Query(GridFsCriteria.whereFilename().is(contentReference.getContentId().getValue()));
GridFSDBFile latestVersionRecord = gridOperations.findOne(query);
if (latestVersionRecord != null) {
Integer version = (Integer) latestVersionRecord.getMetaData().get("version");
return version;
} else return 0;
}
Но, как уже упоминалось, функция findLatestVersion() всегда возвращает 1 (кроме первого раза, когда она возвращает 0...
Если у меня это работает, есть ли способ получить только метаданные документа? В findLatestVersion()
нет необходимости загружать сам файл.