我有一些C代码使用了MongoDB驱动程序的旧1.x版本,它提供了使用MongoCollection.Save()方法的通用保存方法。但是,在升级到2.0之后,此方法似乎已不存在,并替换为一个更新方法,该方法要求指定对象上的所有已更新字段(这显然不适合通用方法…)
如何在2.0驱动程序中保留旧保存方法(即只传入一个对象以更新所有字段)的功能?

最佳答案

您可以将ReplaceOneAsyncIsUpsert标志和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查看它是插入还是更新。

07-26 07:11