Javascript 使用mongoose从数组中删除单个项
我是网络开发新手,正在制作一个todo应用程序。我有以下模式和模型:Javascript 使用mongoose从数组中删除单个项,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我是网络开发新手,正在制作一个todo应用程序。我有以下模式和模型: const tdSchema = new mongoose.Schema({ category: { type: String, required: true, unique: true }, tds: { type: [{ type: String }] } }); const ToDo = mongoose.model("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 }
const doc = await ToDo.findOne({ _id: "5f7e2c3d1a151704382ce109" });
console.log(doc); // optional (used to illustrate how code works)
const updated = await doc.save();
console.log(updated); // optional (used to illustrate how code works)
我想从数组“todos”中删除“Update Resume”,同时保留文档中的所有其他内容
如何使用Mongoose JS实现这一点?首先查找文档:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Update Resume", "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
const doc = await ToDo.findOne({ _id: "5f7e2c3d1a151704382ce109" });
console.log(doc); // optional (used to illustrate how code works)
const updated = await doc.save();
console.log(updated); // optional (used to illustrate how code works)
这将记录:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Update Resume", "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
从这里只需访问“TODO”并从中删除,就像从典型的JavaScript数组中删除一样
doc.todos = doc.todos.filter(e => e !== "Update Resume");
然后保存您的文档:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Update Resume", "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
const doc = await ToDo.findOne({ _id: "5f7e2c3d1a151704382ce109" });
console.log(doc); // optional (used to illustrate how code works)
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 }
首先查找文档:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Update Resume", "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
const doc = await ToDo.findOne({ _id: "5f7e2c3d1a151704382ce109" });
console.log(doc); // optional (used to illustrate how code works)
const updated = await doc.save();
console.log(updated); // optional (used to illustrate how code works)
这将记录:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Update Resume", "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
从这里只需访问“TODO”并从中删除,就像从典型的JavaScript数组中删除一样
doc.todos = doc.todos.filter(e => e !== "Update Resume");
然后保存您的文档:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Update Resume", "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
const doc = await ToDo.findOne({ _id: "5f7e2c3d1a151704382ce109" });
console.log(doc); // optional (used to illustrate how code works)
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 }
要基于@Bilal Saleem的答案,如果您只想运行一个查询,并确保它在多人同时发出请求时工作,则可以使用
$pull
操作符在更新查询中执行此操作
$pull运算符用于从mongodb数组中删除项,并支持对要提取的项的查询条件
const doc = await ToDo.updateOne(
{ _id: "5f7e2c3d1a151704382ce109" },
{
$pull: {
todos: "Update resume",
}
}
);
在上述情况下,如果您只想运行一个查询,并确保在多人同时发出请求的情况下该查询可以工作,那么这将从
todos
数组中$pull
,并删除任何与“更新简历”
相等的项,以构建@Bilal Saleem的答案,您可以使用$pull
操作符在更新查询中执行此操作
$pull运算符用于从mongodb数组中删除项,并支持对要提取的项的查询条件
const doc = await ToDo.updateOne(
{ _id: "5f7e2c3d1a151704382ce109" },
{
$pull: {
todos: "Update resume",
}
}
);
在上述情况下,这将从todos
数组中$pull
,并删除任何等同于“更新简历”