删除Mongodb中对象数组中的元素?

时间:2018-03-01 08:42:29

标签: node.js mongodb mongoose

我的文件如下:

{
  _id: ObjectId,
  name: 'String',
  description: 'String',
  articles: [
    { reference: ObjectId, title: 'String', digest: 'String', content: '...' },
    { reference: ObjectId, title: 'String', digest: 'String', content: '...' },
    { reference: ObjectId, title: 'String', digest: 'String', content: '...' },
    { reference: ObjectId, title: 'String', digest: 'String', content: '...' },
    ...
  ]
}

我只想从此文档中删除一篇具有ObjectId aid的特定文章。所以我将方法与mongoose

一起使用
Model.update({
  _id: 'the document ObjectId',
}, {
  $pull: {
    articles: {
      $elemMatch: {
        reference: aid,
      },
    },
  },
});

结果是:

{n: 1, nModified: 1, ok: 1}

但是文件的变化与我的期望不同:

{
  _id: ObjectId,
  name: 'String',
  description: 'String',
  articles: [],
}

我想知道为什么以及如何删除我期望的特定文章。

2 个答案:

答案 0 :(得分:2)

您可以使用$pull运算符以下列方式从mongodb中删除数组中的对象:

Model.findOneAndUpdate({_id: "the document ObjectId",{$pull: {arrayName: {"element Name": "element value"}}}})

答案 1 :(得分:1)

试试这个

Model.update({
    _id: 'the document ObjectId',
}, {
    $pull: {
        articles: { "reference" : aid}
    }
});