【问题标题】:Deleting a single item from an array using mongoose使用猫鼬从数组中删除单个项目
【发布时间】:2021-01-28 01:47:39
【问题描述】:

我是 Web 开发新手,正在制作一个待办事项应用程序。我有以下架构和模型:

const tdSchema = new mongoose.Schema({
  category: {
    type: String,
    required: true,
    unique: true
  },
  tds: {
    type: [{
      type: String
    }]
  }
});
const ToDo = mongoose.model("ToDo", tdSchema);

这是一个文档示例:

{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"), 
"todos" : [ "Update Resume", "Apply for jobs" ], 
"category" : "Career", "__v" : 0 }

我想从数组“todos”中删除“更新简历”,同时保留文档中的所有其他内容。

如何使用 Mongoose JS 做到这一点?

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    首先找到文档:

    const doc = await ToDo.findOne({ _id: "5f7e2c3d1a151704382ce109" });
    console.log(doc);  // optional (used to illustrate how code works)
    

    这将记录:

    { "_id" : ObjectId("5f7e2c3d1a151704382ce109"), 
    "todos" : [ "Update Resume", "Apply for jobs" ], 
    "category" : "Career", "__v" : 0 }
    

    从这里访问“todos”并从中删除,就像从典型的 JavaScript 数组中删除一样。

    doc.todos = doc.todos.filter(e => e !== "Update Resume");
    

    然后保存您的文档:

    const updated = await doc.save();
    console.log(updated);  // optional (used to illustrate how code works)
    

    你会在你的日志中得到这个:

    { "_id" : ObjectId("5f7e2c3d1a151704382ce109"), 
    "todos" : [ "Apply for jobs" ], 
    "category" : "Career", "__v" : 0 }
    

    【讨论】:

      【解决方案2】:

      以@Bilal Saleem 的回答为基础,如果您只想运行一个查询并确保它在多人同时发出请求时有效,您可以使用$pull 运算符在更新查询中执行此操作。

      $pull 运算符用于从 mongodb 数组中删除项目,并支持您希望拉取的项目的查询条件。

      const doc = await ToDo.updateOne(
        { _id: "5f7e2c3d1a151704382ce109" },
        {
          $pull: {
            todos: "Update resume",
          }
        }
      );
      

      在上述情况下,这将从todos 数组中删除$pull,并删除任何等于"Update resume" 的项目

      【讨论】:

        猜你喜欢
        • 2017-12-23
        • 1970-01-01
        • 2019-04-06
        • 2019-11-30
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 2018-05-28
        • 2021-01-22
        相关资源
        最近更新 更多