嵌套的ObjectId数组操作mongodb

时间:2019-09-22 13:26:54

标签: mongodb mongoose code-cleanup

我在mongo数据库中存储了一个对象,其中包含嵌套的ObjectId数组以引用其他模式,例如:

{
  type:'materials',
  value:['5d8762f418eb8659f57f5b47','5d8762f418eb8659f57f5b48']
},
{
  type:'sections',
  value:['5d8762f418eb8659f57f5b49','5d8762f418eb8659f57f5b50']
},

如何对每个值执行最易读和可维护的操作,例如保存,编辑,删除。 它们是抽象规则,例如: 如果我在sections数组中删除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'
          }
        });
      })
    }

0 个答案:

没有答案