C# 文档更新使用驱动程序忽略\u id

C# 文档更新使用驱动程序忽略\u id,c#,.net,mongodb,mongodb-.net-driver,C#,.net,Mongodb,Mongodb .net Driver,我希望能够更新集合中文档中的键/值对,而不考虑_id。这似乎提供了一种实现我所需的方法,但需要关注_id键 本质上,我可以做什么来让我的代码(如下所示)在不向类添加[bsonignorextraelements]属性的情况下工作 根据我将在下面展示的代码,我想我已经接近了,我确实有一个可能的解决方法,使用属性,我也将展示它。但是,如果可能的话,我不想用任何属性装饰类 为什么没有身份证?就我个人而言,我发现_id字段只是一个障碍。它不是我的任何类的一部分,MongoDB也不是关系型的,所以我不使用

我希望能够更新集合中文档中的键/值对,而不考虑_id。这似乎提供了一种实现我所需的方法,但需要关注_id键

本质上,我可以做什么来让我的代码(如下所示)在不向类添加
[bsonignorextraelements]
属性的情况下工作

根据我将在下面展示的代码,我想我已经接近了,我确实有一个可能的解决方法,使用属性,我也将展示它。但是,如果可能的话,我不想用任何属性装饰类

为什么没有身份证?就我个人而言,我发现_id字段只是一个障碍。它不是我的任何类的一部分,MongoDB也不是关系型的,所以我不使用它。我坦率地承认,我可能完全忽略了使用_id字段背后的意图和想法,但我认为在MongoDB中不需要它。尽管如此,如果可能的话,我希望专注于工作而不关注_id字段

话虽如此,我有检索单个文档或整个集合以及插入单个文档或整个集合的方法,一般来说,不考虑_id字段

我发现在“select”中忽略_id的关键是使用投影。我对驱动程序不是很熟悉,但下面是几行代码:

public const string ELEMENT_ID = "_id";
ProjectionDefinition<T> projection = Builders<T>.Projection.Exclude(ELEMENT_ID);
IFindFluent<T, T> found = mongoCollection.Find(bsonDocument).Project<T>(projection);
有趣的是,
FindOneAndUpdate
方法实际上似乎成功了,而“后缀”集合实际上得到了修改。此外,返回不包含修改。相反,它是“原始的”(当我使用如下所示的变通方法时)

更多信息:

后缀类:

public class Suffix
{
    public string Code { get; set; }
    public string Description { get; set; }
}


但是,如果可能的话,最好不要使用该属性。

这里缺少的是
.FindOneAndUpdate()
方法的第三个参数,该方法属于
FindOneAndUpdateOptions
类型。在这里,您可以定义是要在修改之后获取文档
,还是要在修改之前获取文档
Before
是默认值,而且您可以指定投影并排除
\u id
属性。尝试:

FilterDefinition<T> filterDefinition = Builders<T>.Filter.Eq(property, originalValue);
UpdateDefinition<T> updateDefinition = Builders<T>.Update.Set(property, newValue);
ProjectionDefinition<T, T> projection = Builders<T>.Projection.Exclude("_id");
var options = new FindOneAndUpdateOptions<T>()
{
    Projection = projection,
    ReturnDocument = ReturnDocument.After
};
updatedDocument = mongoCollection.FindOneAndUpdate<T>(filterDefinition, updateDefinition, options);
FilterDefinition FilterDefinition=Builders.Filter.Eq(属性,原始值);
UpdateDefinition UpdateDefinition=Builders.Update.Set(属性,newValue);
ProjectionDefinition projection=Builders.projection.Exclude(“_id”);
var options=new FindOneAndUpdateOptions()
{
投影=投影,
ReturnDocument=ReturnDocument.After
};
updatedDocument=mongoCollection.FindOneAndUpdate(filterDefinition、updateDefinition、options);

完美。这正是我想要的。谢谢
public class Suffix
{
    public string Code { get; set; }
    public string Description { get; set; }
}
Suffix suffix = new Suffix();
MongoRepository.MongoRepository mongoRepository = new MongoRepository.MongoRepository("MyDataBase");
mongoRepository.UpdateSingle<Suffix>(suffix, "Description", "Jr", "Junior");
[BsonIgnoreExtraElements]
public class Suffix
{
    public string Code { get; set; }
    public string Description { get; set; }
}
FilterDefinition<T> filterDefinition = Builders<T>.Filter.Eq(property, originalValue);
UpdateDefinition<T> updateDefinition = Builders<T>.Update.Set(property, newValue);
ProjectionDefinition<T, T> projection = Builders<T>.Projection.Exclude("_id");
var options = new FindOneAndUpdateOptions<T>()
{
    Projection = projection,
    ReturnDocument = ReturnDocument.After
};
updatedDocument = mongoCollection.FindOneAndUpdate<T>(filterDefinition, updateDefinition, options);