使用C#动态更新MongoDb中的多个字段

时间:2016-08-31 19:02:03

标签: c# mongodb updates

在工作中,我正在为一个将用于许多人和流程的应用程序做出贡献。 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。标题”的关键字。我需要确定哪个字段已被更新以及该集合的哪个元素被修改,这使得生活变得困难。任何人都可以描绘他们如何解决这样的问题,或者指出我解决这些问题的教程?

0 个答案:

没有答案