В настоящее время существует требование, что есть объект - «приложение», в котором есть: «имя», «uploadTime» и «executeFile».Ссылка на файл Mongo document и gridfs
В настоящее время база данных является mongodb. Я хочу использовать документ
Class Application {
String id;
String name;
String type;
Date uploadTime;
GridFSDBFile executeFile;
}
дао слой, когда я пишу сохранить, я нахожу, что я не могу связанные GridFSDBfile непосредственно документа. Мне нужно сначала использовать GridFsTemplate.store сохранить GridDBFile, а затем использовать GridFsTemplate.findOne найти его по имени и поместить объект вложенный в документ приложения. Затем используйте MongoOperation, чтобы сохранить документ приложения.
try {
inputStream = new FileInputStream("C:/testing.app");
gridFsOperations.store(inputStream, "test.app", "jar");
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Query query = query(where("filename").is("test.app"));
GridFSDBFile gridFsDBFile = gridFsOperations.findOne(query);
Application application = new Application();
application.setName("test-app");
application.setType("type", "Java");
application.setexecuteFile (gridFsDBFile);
applicationDao.save(application);
Есть ли способ позвонить в MongoOperation? Если нет, я думаю, что вызов GridFsTemplate.store и MongoOperation.save необходимо выполнить в транзакции. Я помню, что Монго не поддерживал транзакцию. Как это сделать? Проверять транзакцию только в Java-коде?
Я думаю, вы можете неправильно понять мою точку зрения. мой вопрос заключается не в содержании файла и метаданных файлов. Мой вопрос: у меня нормальный документ, и этот нормальный документ имеет элемент gridfs. Я хочу сохранить документ и каскадировать, сохраняя элемент gridfs. Или я должен сначала сохранить элемент gridfs, а затем сохранить документ вручную. Вы знаете, как каскадировать сохранение? – user3003466
Вот где вы ошибаетесь. Вы всегда можете запросить коллекцию fs.chunks для файла. Нет смысла хранить содержимое снова в другой коллекции. Вам нужно пересмотреть свой подход. – BatScream
@BatScream привет, пожалуйста, вы можете сказать, каким будет оптимизированный способ управления данными, подобным этому: Пользователь, file.files и file.chunks - это три коллекции, я хочу, чтобы конкретный пользователь со всем связанным с ним файлом в ответ был возможное.? { "имя": "Batman", «электронная почта»: "[email protected]", "файлы": [{ file1}, {file2}, {file3}, .... так далее ] } –