我正在尝试使用mongoose findByIdAndRemove删除一个注解:
app.post("/delete", async (req, res) => {
const userId = req.session.userId;
const foundUser = await User.findById(userId).exec();
console.log(foundUser);
if (foundUser) {
const itemId = req.body.itemId.toString();
const foundNote = await Note.findByIdAndRemove(itemId).exec();
console.log(foundNote);
if (foundNote) {
res.redirect("/main")
}
}
});
字符串
这就是我的用户对象的样子
{
_id: new ObjectId("6537d3aa0bf4dd1fb949f084"),
username: '[email protected]',
notes: [
{
noteBody: 'test9a',
userId: '6537d3aa0bf4dd1fb949f084',
_id: new ObjectId("6537d3ba0bf4dd1fb949f08a")
}
],
__v: 1
}
型
当我试图删除一个笔记时,console.log(foundNote)返回null。我想我在错误的地方“查找”,但我不确定如何找到我想要的东西。这是user.notes._id。然后删除该特定的笔记。
下面是github https://github.com/ETurner-Bisset/Not-It上完整代码的链接
先谢了。
编辑:
const userSchema = new mongoose.Schema ({
email: String,
password: String,
notes: [noteSchema]
});
const noteSchema = new mongoose.Schema ({
noteBody: String,
userId: String
});
型
1条答案
按热度按时间kkbh8khc1#
所以你的
User
模式显示你的notes
字段是一个子文档数组。这意味着它们没有自己的集合,你不能使用Note
模型发出find*
查询。它们嵌入在你的users
集合中的每个User
文档中,而不是被引用。子文档数据嵌入在顶层文档中。引用的文档是单独的顶层文档。
这意味着你必须从
User
文档的notes
数组中$pull
或pull()
项目。谢天谢地,这可以在一个查询中完成。你可以使用findByIdAndUpdate
或findOneAndUpdate
,但因为你传递的是userId
,那么你可以像这样使用findByIdAndUpdate
:字符串
顺便说一句,这是不需要的:
型