单个文档

时间:2018-02-27 12:48:04

标签: javascript node.js mongodb concurrentmodification

我在MongoDB上遇到并发读写问题,并且想知道数据库系统中是否嵌入了简单的解决方案。

我有一个收集应用统计信息的对象,并在MongoDB中作为单个文档在自己的集合中表示:

{
    "animals": {
        "cats": 0,
        "dogs": 0
}

问题在于,只要用户将猫添加到他们的个人资料中,我就会获得该文档,增加cats次数并编写文档。但是,如果用户在cat之后添加dog,则读取的文档将为0-0并且将写入0-1而不是1-1。

这是一个典型的并发读/写,但我想知道是否有办法防止这种情况而不添加我自己的锁定系统。谢谢!

另外:猫和狗是一个简单的例子,我正在主持一个聊天统计数据库(发送,接收,错误......)。

不相关:Issue with single document concurrent read and write operations in mongodb / node.js

2 个答案:

答案 0 :(得分:1)

在这种特殊情况下,您可以使用增量运算符$inchttps://docs.mongodb.com/manual/reference/operator/update/inc/)而不是读取后写入。

$inc是一个原子操作,因此不应该说明你读过的问题,然后写

答案 1 :(得分:-1)

我认为这与" watchify"有关。它是并发读写的工具。

如果您安装它,它将监视更改并应用于前端。