我是Web开发的新手,正在制作todo应用程序。我有以下架构和模型:
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做到这一点?
答案 0 :(得分:0)
首先找到文档:
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 }
答案 1 :(得分:0)
要以@Bilal Saleem的答案为基础,如果您只想运行一个查询并确保如果多个人同时发出请求,该查询就可以工作,则可以使用$pull
运算符在更新查询中执行此操作。
$ pull运算符用于从mongodb数组中删除项目,并支持您要提取的项目的查询条件。
const doc = await ToDo.updateOne(
{ _id: "5f7e2c3d1a151704382ce109" },
{
$pull: {
todos: "Update resume",
}
}
);
在上述情况下,这将从$pull
数组中todos
,并删除所有等于"Update resume"
的项目