Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用mongoose从数组中删除单个项_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 使用mongoose从数组中删除单个项

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",

我是网络开发新手,正在制作一个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
,并删除任何等同于
“更新简历”