Nick
тока хотел написать что у вас проблема, но вы и сами знаете)
Al
то он удалится, а это плохо..
Nick
тут два момент
Nick
если вы работает сбазой напряму, то монжо просто удалять с условием, что что совпадает id и при это счетчик все еще ноль
Al
Nick
но походу ваш случай как раз второй - монгус по идее скрывает для вас пробелму многопточной работы с бд, т.е. во всех частях приложения виден один и тот же док и его состояние. Но мне с трудом представляется как синхронизировать работу с инкрементами/декрементами через монгус, который чтопудово не гарантирует ничего, т.к. синхронизировать вы должны изменения сами на уровне приложения
Nick
ну так remove({_id:...., counter:0})
Nick
и удалит только если в момент выполнения был уже ноль
Dmitry
ну то есть у вас выйдет к пример 100 папок и в каждой будет один и тот же файл вложен
Al
как он в БД появится?
Dmitry
Nick
ну так вы его туда будете писать
Nick
я ж гвоорю исключительно контроль из ПО
Al
Dmitry
Dmitry
у вас выйдет 10 разных папок, в каждой будет прилинкован один и тот же файл
Dmitry
внутри массива
Dmitry
ну например
Al
внутри массива
и папки тоже хранить в массиве... ? нет тут что то не то ;)
Dmitry
скажем у вас файл "file1"
Dmitry
и есть 3 папки: folder1, 2, 3
Dmitry
если денормализовать выйдет
Dmitry
коллекция из папок:
folder1: {file: "file1"},
folder2: {file: "file1"},
folder3: {file: "file2"}
Al
я понял.. хранить дубликаты этого phys везде внутри папок к которым прилинкован... тема конечно интересная.. но только с phys связан еще реальный файл на сторадже.. и у phys должен быть уникальный id
Dmitry
ну или folder1: {files: ["file1", "file2"]}
Dmitry
Al
Dmitry
но это такое
Dmitry
ну да
Dmitry
Al
уникальность не только по _id, но и по sha1 нужна... а отдельной коллекции phys при этом вообще не будет?
Dmitry
Dmitry
ну это все зависит от задачи
Dmitry
если доступаться к файлу можно только через папку то можно денормализовать, а если нужно как-то выводить списки между папками или получать полный список уникальных файлов тогда выходит слишком напряжно с денормализацией
Al
да конечно уникальный по sha1 файлы должны быть доступны без папок..
Al
ну тогда остаются монговские транзакции?
Al
А всякие pre delete не при делах?
Dmitry
Al
https://mongoosejs.com/docs/middleware.html а вот это?
Al
или не обеспечит целостность?
Dmitry
вообще можно просто раз в день чистить файлы, например
Dmitry
ну типа если в 12:00 на файл ссылается 0 папок - удаляем
Al
Dmitry
а, ну тогда не вижу особой проблемы с целостностью...
Al
ну вот в 12:00 ссылается ноль папок.. и тут раз и добавили
Al
Почему?
Al
ну сделали в этом фоновом скрипте find увидили 0 папок. И тут добавили файл этот же, а мы увидив в find что нету и можно удалить, его вот этот новый и удалим
Al
но то самое о чем выше писали..
Al
оно и в фоновом скрипте также.
Dmitry
Nick
зачем вообще вам нужно удалять?
Al
Al
Есть мысль сделать вложенные документы в phys
Al
те в phys вкладываем прилинкованные Folder
Dmitry
ну место займут.
это может быть дешевле чем решать вопрос синхронизации этого всего...
Al
Если вложенных документов не остается то делаем remove
Al
это можно сделать одним запросом?
Al
можно ли сделать условие в deleteOne что бы проверяло число вложенных в данный док документов?
Dmitry
не совсем понял что именно, но в любом случае можно сделать batch запрос
Dmitry
Dmitry
выходит папки типа тегов
Dmitry
но что если пока выполняется команда кто-то добавит новый такой же файл? :)
Dmitry
к примеру вы отправили batch запросов на удаление на сервер и именно в это время добавили новый файл
Al
Al
если сможем проверять и удалять атомарно тогда и пусть добавляют такой же..
Dmitry
ну в теории есть delay между запросом и выполнением на сервере
Dmitry
короче мне кажется вообще странным идея удаления файлов с привязкой к папке
Dmitry
я так понял нужно удалить не только документ файла но и удалить где-то на диске сам файл
yopp
Al
Anton
А есть тут кто-нибудь кто управляет реплика сетом на bare_metal/виртуалках через chef?
Anonymous
ку, можно как-то преобразовывать id в нормальные в монго? а то не очень смотрится адресная строка example.com/post/5bgfdjsnjteretwqeaw
Nick
а что значит "нормальные" ?
Anonymous
красивые