我有一个结构文件看起来像这样的集合:
{
"car": 1,
"user": 1,
"items": [
{
"prop1": "text1",
"prop2": "text2"
},
{
"prop1": "text1",
"prop2": "text2"
}
],
"totalItems": 2,
"totalDesired": 10,
"totalMissing": 8
}
前端应用程序每次向后端应用程序发送1个项目。 该请求是这样的:
{
"car": 1,
"user": 1,
"item": {
"prop1": "text1",
"prop2": "text2"
}
}
该集合具有由(汽车,用户)组成的索引。 我需要同一用户的每个请求都递增数组“ items”,因此存储的文档包含用户发送的所有项目和一些汇总数据。 此项目最多可包含10个项目。
在某些情况下,我有很多用户向该API发送请求并因此更新/创建文档。
这是一个聊天系统,在用户向用户发送答案(使用Enter)后,如果该项目正在发送到后端API,则该请求。
我需要在每个答案后发送邮件,因为用户可以在完成所有问题之前离开聊天室。
同一用户没有并发。
我在考虑这种解决方案:
后端API将通过mongodb中的汽车/用户(索引)查询文档,增加项目,汇总并在mongodb中调用更新。 因此,我需要对用户的每个请求执行2个操作,第一个操作用于检索文档,最后一个操作用于更新。
我的问题是:
1-当有许多用户在更新文档时,我可以使用锁吗?甚至汽车/用户都不一样?
2-有没有更好的选择来解决这种情况?
我正在使用mongodb 4.0.4