Mongoose findByIdAndRemove返回null

pgky5nke  于 2023-11-19  发布在  Go
关注(0)|答案(1)|浏览(147)

我正在尝试使用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
});

kkbh8khc

kkbh8khc1#

所以你的User模式显示你的notes字段是一个子文档数组。这意味着它们没有自己的集合,你不能使用Note模型发出find*查询。它们嵌入在你的users集合中的每个User文档中,而不是被引用。
子文档数据嵌入在顶层文档中。引用的文档是单独的顶层文档。
这意味着你必须从User文档的notes数组中$pullpull()项目。谢天谢地,这可以在一个查询中完成。你可以使用findByIdAndUpdatefindOneAndUpdate,但因为你传递的是userId,那么你可以像这样使用findByIdAndUpdate

const updatedUser = await User.findByIdAndUpdate(userId,
   { 
      $pull: {
         notes: { _id: req.body.itemId }
      }
   },
   {new:true} //< This option returns the document after update has taken place
);

字符串
顺便说一句,这是不需要的:

const itemId = req.body.itemId.toString();

相关问题