首页 > 解决方案 > Mongo C# - 更新单个字段,如果不插入文档

问题描述

我在我的一个小项目中使用 C# Mongo 驱动程序 v2.9.2,我试图弄清楚如何进行更新插入,如果存在文档,则只更新单个字段,如果不存在则插入整个文档。

我有以下代表文档的 POCO 类:

public class Event 
{
    public Guid EventId { get; set;}
    public DateTime ReceivedAt { get; set;}
    public string Body { get; set; }
}

如果我的代码收到一个已经看到的事件(基于EventId),我只想更新该Body字段ReceivedAt并保持/的原始值EventIdEventId如果基于我想要插入文档而找不到与文档匹配的内容。

目前我正在使用,ReplaceOneModel<Event>但是在更新插入时会更新所有字段:

var model = events.Select(
    e => new ReplaceOneModel<Event>(Builders<Event>.Filter.Where(
        x => x.EventId == e.EventId), e) { IsUpsert = true });

await collection.BulkWriteAsync(model);

任何帮助深表感谢!

标签: c#mongodb

解决方案


你可以这样做:

var filter = Builders<MyEvent>.Filter.Eq(x => x.Id, id);
var update = Builders<MyEvent>.Update
    .Set(x => x.Body, "a new event body");
await context.MyCollection.UpdateOneAsync(filter, update, new UpdateOptions { IsUpsert = true });

推荐阅读