首页 > 解决方案 > 使用猫鼬从数组中删除单个项目

问题描述

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

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 做到这一点?

标签: javascriptnode.jsmongodbexpressmongoose

解决方案


首先找到文档:

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 }

推荐阅读