Mongodb更新或插入c#

时间:2019-01-21 17:52:11

标签: c# mongodb mongodb-query

我想更新或插入到mongo集合“成员”中。在这个集合下,我有一个数组MagazineSubscription。在这里,杂志Code是唯一的。请参考示例JSON。

因此,如果需要使用C#mongo驱动程序更新或插入mongo。

  1. 首先我需要检查此代码是否存在 2,如果存在,请更新一个
  2. 如果不存在,请插入。

我有什么方法可以一步一步完成。就像如果它已经存在一样,则更新,否则插入。而不是打两次。因为我的收藏很大。

{ 
    "_id" : ObjectId("5c44f7017en0893524d4e9b1"), 
    "Code" : "WH01", 
    "Name" : "Lara", 
    "LastName" : "John", 
    "DOB" : "12-10-2017", 
    "Gender" : "Male", 
    "Dependents" : [
        {
            "RelationShip" : "Son", 
            "Name" : "JOHN", 
            "DOB" : "01-01-1970", 
            "Gender" : "Male", 
            "Address" : "Paris", 
            "ContactNumber" : "+312233445666"
        }, 
        {
            "RelationShip" : "Wife", 
            "Name" : "Marry", 
            "DOB" : "01-01-1980", 
            "Gender" : "Female", 
            "Address" : "Paris", 
            "ContactNumber" : "+312233445666"
        }
    ]
    "Matrimony" : [
        {
            "Fee" : 1000.0, 
            "FromDate" : "01-01-2015", 
            "ToDate" : "01-01-2017", 
            "Status" : false
        }
    ], 
    "MagazineSubscription" : [
        {
            "MagazineCode" : "WSS", 
            "DateFrom" : "01-05-2018", 
            "DateTo" : "01-01-2020", 
            "PaidAmount" : 1000.0, 
            "ActualCost" : 1500.0, 
            "Status" : false, 
            "DeliveryStatus" : [
                {
                    "ReturnedDate" : "10-01-2019", 
                    "Comment" : "Returned because of invalid address"
                }, 
                {
                    "ReturnedDate" : "10-02-2019", 
                    "Comment" : "Returned because of invalid address"
                }
            ]
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

在upsert:true中使用mongodb的更新操作。 请参考此处:https://docs.mongodb.com/manual/reference/method/db.collection.update/

以下是页面中的示例:

 db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>, //you need this option
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)

根据您的需求,这是一个类似的问题: Upserting in Mongo DB using official C# driver

编辑1

步骤:

  1. 首先,您需要编写过滤器来扫描文档是否存在。您可以检查任意数量的键(基本上是文档)。
  2. 使用您要更新的键(基本上是文档)来编写更新部分。
  3. 将upsert设置为true。

Mongodb将使用您的过滤器搜索文档。如果找到,它将使用更新部分执行您提到的更新。

如果该文档不存在,则将使用更新部分中的筛选键+键来创建新文档。

希望让事情变得很清楚,因为我从未使用过C#mongo驱动程序。因此,我将无法为您提供确切的语法。

编辑2

我在这里提供@jeffsaracco的解决方案:

MongoCollection collection = db.GetCollection("matches");
var query = new QueryDocument("recordId", recordId); //this is the filter

var update = Update.Set("FirstName", "John").Set("LastName","Doe"); //these are the keys to be updated
matchCollection.Update(query, update, UpdateFlags.Upsert, SafeMode.False);