Mongodb обновить или вставить в C # - PullRequest
0 голосов
/ 21 января 2019

Я хочу обновить или вставить в коллекцию монго "Member". Под этой коллекцией у меня есть массив MagazineSubscription. Здесь журнал Code уникален. Пожалуйста, обратитесь образец JSON.

Так что если нужно обновить или вставить в монго, используя драйвер C # 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 голосов
/ 21 января 2019

Используйте операцию обновления mongodb с помощью upsert: true.Пожалуйста, обратитесь сюда: 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 в Mongo DB с использованием официального C #драйвер

РЕДАКТИРОВАТЬ 1

Шаги:

  1. Сначала необходимо написать фильтр для сканирования, если документ существует.Вы можете проверить любое количество ключей (по сути, документа).
  2. Напишите раздел обновления с ключами, которые вы хотите обновить (по сути, документом).
  3. Установите для параметра 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...