Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据查询(取决于其他集合)更新文档_Javascript_Mongodb_Mongoose_Mongodb Query_Mongoose Plugins - Fatal编程技术网

Javascript 根据查询(取决于其他集合)更新文档

Javascript 根据查询(取决于其他集合)更新文档,javascript,mongodb,mongoose,mongodb-query,mongoose-plugins,Javascript,Mongodb,Mongoose,Mongodb Query,Mongoose Plugins,Mongodb中是否有可能根据查询其他集合中的文档“计数”来更新文档? 我正在寻找使它成为原子操作的选项 更具体地说,以下是两个集合的设计方式: 书籍(收藏) _身份证 名称 isReviewed[布尔值] 评论(收集) _身份证 bookID[\u图书收藏中的id] 评论 我提出这个设计是因为一本书的“评论”数组将不断增长并且是可变的。 现在,当有“审阅”文档时,需要将“Book”文档中的isReviewed标志设置为“true”。为各自的书创建。只要一本书至少有一个相关的评论存在,该标志将保

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

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

书籍(收藏)

_身份证 名称 isReviewed[布尔值]

评论(收集)

_身份证 bookID[\u图书收藏中的id] 评论

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

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

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

现在,考虑到上述情况,我如何确保执行与基于“Reviews”集合中的“count”设置“isReviewed”标志相关的更新

这是一个没有事务就无法解决的问题吗(我的意思是,我需要RDBMS吗)?我也愿意重新设计我的收藏


非常感谢您的帮助,谢谢您

由于mongodb提供文档级的自动复制功能,您可以按如下方式预先加入您的图书和评论收藏:

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

注意:您的文档最大大小应在16MB以内。 如果你期望你的“评论”不止这些,你将不得不分成两部分
在您的代码中收集并处理两个案例。

我认为您唯一可行的选择(操作保持原子性)是将审阅文档嵌套为书籍的子文档。@bardzusny感谢您的回复。我考虑过这个选择,然后才提出这个设计,有两个系列。正如我在问题中提到的,我需要两个集合,因为“评论”将持续增长并且是可变的。谢谢您的回复。我知道,事实上,我的情况是“Reviews”数组将不断增长,并且应该能够对数组项执行CRUD操作。(正如我在问题中提到的)。当它是两个集合的情况时,您提到我需要在代码中处理。你能给我一个代码示例吗?如果这有助于我保持数据的一致性,我完全支持这样做。我感谢你的帮助