JBones 的回答必须按预期工作。
但是为了解决你的问题,这里我一步一步解释。
用户架构:
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema({
name: String,
todos: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Todo"
}
]
});
module.exports = mongoose.model("User", userSchema);
Todo 架构:
const mongoose = require("mongoose");
const todoSchema = new mongoose.Schema({
name: String,
completed: Boolean
});
module.exports = mongoose.model("Todo", todoSchema);
路线:
router.put("/deleteTodoFromUser/:id/:idTodo", (req, res) => {
User.findByIdAndUpdate(
req.params.id,
{ $pull: { todos: { $in: [req.params.idTodo] } } },
{ new: true },
(err, usr) => {
if (err) {
res.status(500).send(err);
}
if (usr) {
res.send(usr);
} else {
res.status(400).send("Bad request - User not found");
}
}
);
});
测试:
假设您的待办事项集合中有这 3 个待办事项文档。
[
{
"_id" : ObjectId("5dfa6776e1783d0c10a8d827"),
"name" : "Todo 3",
"completed" : true,
"__v" : NumberInt(0)
},
{
"_id" : ObjectId("5dfa676fe1783d0c10a8d826"),
"name" : "Todo 2",
"completed" : false,
"__v" : NumberInt(0)
},
{
"_id" : ObjectId("5dfa6768e1783d0c10a8d825"),
"name" : "Todo 1",
"completed" : false,
"__v" : NumberInt(0)
}
]
还有这样的用户文档:
{
"_id" : ObjectId("5dfa846379db991c3c4341e4"),
"todos" : [
ObjectId("5dfa6768e1783d0c10a8d825"),
ObjectId("5dfa676fe1783d0c10a8d826"),
ObjectId("5dfa6776e1783d0c10a8d827")
],
"name" : "User 1",
"__v" : NumberInt(0)
}
当我们尝试删除用户 id 5dfa846379db991c3c4341e4 的待办事项 id 5dfa676fe1783d0c10a8d826 时,
url 必须是这样的 http://...../deleteTodoFromUser/5dfa846379db991c3c4341e4/5dfa676fe1783d0c10a8d826
结果会是这样的:(5dfa676fe1783d0c10a8d826 被移除)
{
"todos": [
"5dfa6768e1783d0c10a8d825",
"5dfa6776e1783d0c10a8d827"
],
"_id": "5dfa846379db991c3c4341e4",
"name": "User 1",
"__v": 0
}
事实上,如果您检查用户集合,您会在用户文档中看到 2 个待办事项。