операции с вложенным массивом ObjectId mongodb - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть объект, хранящийся в базе данных 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'
          }
        });
      })
    }
...