c# - 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
并保持/的原始值EventId
。EventId
如果基于我想要插入文档而找不到与文档匹配的内容。
目前我正在使用,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);
任何帮助深表感谢!
解决方案
你可以这样做:
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 });
推荐阅读
- python - Python 梵文图像提取
- c++ - 如何将枚举类型转换为字符串
- javascript - ejs 包含和部分的问题
- ios - 如果我要求现有应用程序的管理员删除他们的应用程序,那么我现在可以创建一个具有相同名称的新应用程序吗?
- java - Java If 语句问题
- javascript - Electron js不渲染反应构建的Web应用程序
- .net-core - System.Configuration.ConfigurationManager 与 Microsoft.Extensions.Configuration
- c# - 如何转置查询结果?
- c# - 如何从 csproj 中删除多余的 msbuild 属性?
- python - NetworkX - Graph.nodes() 如何接收参数?