假设我有一个基本的博客 Web 应用程序,它使用以下文档架构来写博客文章。
{
_id: ObjectId(...),
title: "Blog Post #1",
text: "<p>This is my blog post!</p>",
comments: [
{
user: "username1",
time: Date(...),
text: "This is a great blog post!"
},
{
user: "username2",
time: Date(...),
text: "This is even better than sliced bread!"
}
]
}
这一切都很好,但现在让我们假设用户可以编辑或删除他的评论。最重要的是,它是一个网络应用程序,因此可能有多个人同时编辑或删除他们的评论。现在假设我以“username2”身份登录并尝试编辑我的评论,这是评论数组中的第二个项目 - 索引位置 1。就在我单击“保存”之前,user1 登录并删除他的第一个评论数组中的项。如果我的代码尝试按索引位置删除用户 2 的评论,它将失败,因为数组中不再有 2 个项目。
我想到了两个想法,但我对任何一个都不疯狂。
- 在每条评论上创建某种 id
- 在父文档上创建一个“lastModified”时间戳,并且仅在文档没有任何更改时才保存编辑。
处理这种情况的最佳方法是什么?如果我真的需要每个评论的 id,我必须自己生成它吗?它应该是什么数据类型?还是最好同时使用我的两个想法?还是我什至没有考虑过其他选择?