2015-05-21 2 views
8

У меня есть код на C#, который использует старую версию драйвера MongoDB версии 1.x, которая предлагает общий метод сохранения, используя метод MongoCollection.Save(). Однако после обновления до 2.0 этот метод, кажется, ушел и заменен методом обновления, который требует, чтобы все уточненные поля объекта указывались (что, очевидно, не подходит для общего метода ...)Новая альтернатива для старого .net Driver MongoCollection.Save?

Как сделать сохранить функциональность старого метода сохранения (т.е. просто передать объект для обновления всех полей) в драйвере 2.0?

ответ

7

Вы можете использовать ReplaceOneAsync с IsUpsert флагом и ID запроса:

public async Task<ReplaceOneResult> Save(Hamster hamster) 
{ 
    var replaceOneResult = await collection.ReplaceOneAsync(
     doc => doc.Id == hamster.Id, 
     hamster, 
     new UpdateOptions {IsUpsert = true}); 
    return replaceOneResult; 
} 

Вы можете посмотреть на ReplaceOneResult.MatchedCount, чтобы увидеть, был ли это вставка или обновление.

Смежные вопросы