【问题标题】:How to remove nested objects from an array in Mongoose如何从 Mongoose 的数组中删除嵌套对象
【发布时间】:2017-01-02 17:05:02
【问题描述】:

这是我的第一个 Web 应用程序,我需要删除一个嵌套数组项。您将如何使用此架构删除 Mongoose 中的对象:

User: {
    event: [{_id:12345, title: "this"},{_id:12346, title:"that"}]
}

如何在 mongoose/Mongo 中删除 id:12346?

【问题讨论】:

    标签: javascript node.js mongoose


    【解决方案1】:

    使用$pull 从以下项目数组中删除项目:

    db.User.update(
      { },
      { $pull: { event: { _id: 12346 } } }
    )
    

    $pull 运算符从现有数组中删除 a 的所有实例 一个或多个符合指定条件的值。

    第一个参数中的空对象是query 来查找文件。上述方法将集合中所有文档中event数组中带有_id: 12345的项删除。 如果数组中有多个符合条件的项,请将multi 选项设置为 true,如下所示:

    db.User.update(
      { },
      { $pull: { event: { _id: 12346 } } },
      { multi: true}
    )
    

    【讨论】:

    • 如果我没看错,它会在所有内容中搜索event { _id: 123456) 并将其删除,对吗?如果需要,我可以通过在第一个条件中添加一个 ID 来删除一个实例,对吗?
    • 它将从集合User中的所有文档中的数组event中删除所有items和_id:123456。如果你想删除所有匹配的文档,你可以使用remove方法
    • $pull 将删除现有数组中的特定值,而不是与条件匹配的整个文档。如果要删除符合条件的整个文档,请使用db.collection.remove
    • 4 年后,这仍然是正确的答案。谢谢@Supradeep!
    【解决方案2】:

    Findone 将搜索 id,如果没有找到则 err 否则 remove 将起作用。

       User.findOne({id:12346}, function (err, User) {
            if (err) {
                return;
            }
            User.remove(function (err) {
                // if no error, your model is removed
            });
        });
    

    【讨论】:

      【解决方案3】:
      User.findOneAndUpdate({ _id: "12346" }, { $pull: { event: { _id: "12346" } } }, { new: true });
      

      【讨论】:

      • 为什么不是一个好的解决方案?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2017-04-25
      • 2021-01-30
      • 2020-12-07
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多