У меня есть объект, хранящийся в базе данных mongo, которая содержит вложенные массивы ObjectId для ссылки на другие схемы, например:
{
type:'materials',
value:['5d8762f418eb8659f57f5b47','5d8762f418eb8659f57f5b48']
},
{
type:'sections',
value:['5d8762f418eb8659f57f5b49','5d8762f418eb8659f57f5b50']
},
Как выполнять операции, такие как Сохранить, Изменить, Удалить для каждого значения, наиболее читаемыеи ремонтопригоден. Это, например, абстрактные правила: если я удаляю 5d8762f418eb8659f57f5b49 в массиве разделов, его тоже нужно удалить в db ...
Я написал, например, этот пример кода, чтобы удалить удаленное значение, ноя думаю, что проще с операторами массива mongodb:
async function removedUnusedInDB(type, ExpectedSchema) {
const projects = await ProjectSchema.find({ _id: project._id }).exec();
const sendedProject = project[type].value;
const dbProject = projects[0][type].value;
const projectDifferences = dbProject.filter(o => !sendedProject.some(v => v._id.toString() === o.toString()))
projectDifferences.forEach(async (toRemoveElem) => {
await ExpectedSchema.remove({ _id: ObjectId(toRemoveElem._id) }, function (err) {
if (!err) {
console.log('removed linked value unused!');
}
else {
throw 'Cannot remove unfindable linked value'
}
});
})
}