根据查询更新文档,具体取决于其他集合

时间:2015-06-05 20:16:13

标签: javascript mongodb mongoose mongodb-query mongoose-plugins

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

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

书籍(集合)

_id 名称 isReviewed [布尔]

评论(收藏)

_id bookID [书籍收藏中的_id] 评论

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

当书籍没有评论时,相同的旗帜将设置为“false”。 (创建Book doc。时,标志的默认值为“false”) 删除评论时,会计算图书的评论计数,以查看是否可以将其设置为“false”。 (如果count为0,则设置为false)。

此系统专为多用户环境而设计,可共享书籍和评论等所有资源。所有用户都获得了所有资源的读/写权限。(我知道允许所有用户能够创建/读取/编辑/删除所有评论听起来很奇怪,但是,让我们说这是功能上的情况)。

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

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

感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:0)

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

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

}

P.S:MAX的文档大小应在16MB以内。 如果你期望你的“评论”将超过这个,你将不得不拆分 两个集合并在代码中处理大小写。