在工作中,我正在为一个将用于许多人和流程的应用程序做出贡献。 MongoDb用于存储数据。我们预见如果我们没有正确更新操作,就会出现并发问题。因为我对MongoDb很新,所以我在家做一个概念验证。插入和删除工作正常,但有更新。
考虑以下电影记录:
{
"ID": "74733528-a491-4a73-8462-eca00f63c400",
"Title": "The Matrikx",
"Year": "1979",
"Duration": "3h16min",
"Categories": [
{
"Category": "Action"
},
{
"Category": "Sci-Fi"
}
],
"Reviews": [
{
"ReviewerId": "82c53033-e6dd-4745-89e4-74ab29ff17be",
"ReviewerName": "Keanu",
"Comment": "The best movie ever"
},
{
"ReviewerId": "49c906a4-4f42-41b4-9a30-fee764fa04a1",
"ReviewerName": "Laurence",
"Comment": "The best movie ever++"
}
]
}
我预见到一个场景,其中两个用户User1和User2同时从Mongo获取此文档,然后编辑同一文档。假设User1更正了标题和年份。 User2没有更改这些字段,但更新了持续时间字段和Laurence发布的评论。两个用户都应该能够保留他们的更改,而不会覆盖其他用户所做的更改。
使用C#和MongoDb驱动程序v2.2,如何动态更新少数属性而不是替换整个文档?我已经看到了SO处方的几个答案,例如。
Builders<BsonDocument>.Update.Set("key1","value1").Set("key2","value2")
但是除非我在编码期间知道将要设置哪些字段,否则我看不出它是如何有用的。 The accepted answer to this SO question 建议使用Update.Combine,这似乎更好。获取密钥的实用方法是什么(例如User1的标题和年份)?对于同时修改了第二次评论的User2,我需要构建“评论。$。1。标题”的关键字。我需要确定哪个字段已被更新以及该集合的哪个元素被修改,这使得生活变得困难。任何人都可以描绘他们如何解决这样的问题,或者指出我解决这些问题的教程?