0

Mongodb 中是否有可能根据对其他集合中文档“计数”的查询来更新文档?我正在寻找使其成为原子操作的选项。

更具体地说,以下是这两个集合的设计方式:

书籍(收藏)

_id 名称 isReviewed [布尔]

评论(收藏)

_id bookID [_id in Books Collection] 评论

我提出了这个设计,因为一本书的“评论”数组将不断增长并且是可变的。现在,当有“Review”文档时,需要将“Book”文档中的 isReviewed 标志设置为“true”。为各自的书创建。只要一本书至少存在一个相关评论,该标志就会保持“真实”。

当一本书没有评论时,相同的标志将设置为“false”。(创建图书文档时,该标志的默认值为“false”)删除评论时,计算一本书的评论计数,看是否可以将其设置为“false”。(如果 count 为 0,则设置为 false)。

该系统专为共享书籍和评论等所有资源的多用户环境而设计。所有用户都被授予对所有资源的读/写权限。(我知道允许所有用户能够创建/读取/编辑/删除所有评论听起来很奇怪,但是,假设在功能上就是这样)。

现在,考虑到上述情况,我如何确保根据“评论”集合中的“计数”执行与设置“isReviewed”标志相关的更新?

这是一个没有交易就无法解决的案例(我的意思是,我需要 RDBMS)吗?我也愿意重新设计我的收藏。

任何帮助表示赞赏,谢谢

4

1 回答 1

0

由于 mongodb 在文档级别提供 AUTOMICITY,您可以预先加入您的书籍和评论集合,如下所示:

db.Books.insert(
{
 "_id" : 1,
 "Name": "ABC",
 "reviews": [ ],
 "count" : 0

}

PS:您的文档大小应在 MAX 的 16MB 以内。如果您期望您的“评论”不止于此,您将不得不分成两个集合并在您的代码中处理案例。

于 2015-06-07T11:55:10.733 回答