C# 使用名称字符串向Mongo文档添加字段

C# 使用名称字符串向Mongo文档添加字段,c#,mongodb,bson,C#,Mongodb,Bson,我想在现有文档上创建一个新字段。我使用以下行将所有文档从数据库中取出,放入POCOs: var collection = _database.GetCollection<Address>(collectionName); 这一切都很好 要添加字段,我尝试了以下操作: a.ToBsonDocument().Add("RainfallMM", rainfallMM); 但它不能进入数据库。有什么窍门吗?试试看 a.Add({"RainfallMM", rainfallMM}); 试

我想在现有文档上创建一个新字段。我使用以下行将所有文档从数据库中取出,放入POCOs:

var collection = _database.GetCollection<Address>(collectionName);
这一切都很好

要添加字段,我尝试了以下操作:

a.ToBsonDocument().Add("RainfallMM", rainfallMM);
但它不能进入数据库。有什么窍门吗?

试试看

a.Add({"RainfallMM", rainfallMM});
试一试

a.Add({"RainfallMM", rainfallMM});

我在评论中问过你们,你们是否向地址模型添加了新属性,你们说并没有,你们想动态添加它。这里的诀窍是将集合初始化为地址集合,而mongo会忽略默认情况下不属于地址模型的所有属性

如果要动态添加,则需要将集合的启动方式更改为:

var collection = _database.GetCollection<BsonDocument>("addresses");
PS还有一些其他的解决方法,如果你不喜欢这个,我可以告诉你剩下的=)


希望有帮助!干杯

我在评论中问过你们,你们是否向地址模型添加了新属性,你们说并没有,你们想动态添加它。这里的诀窍是将集合初始化为地址集合,而mongo会忽略默认情况下不属于地址模型的所有属性

如果要动态添加,则需要将集合的启动方式更改为:

var collection = _database.GetCollection<BsonDocument>("addresses");
PS还有一些其他的解决方法,如果你不喜欢这个,我可以告诉你剩下的=)


希望有帮助!干杯

正如@Fidel所要求的那样,我将尝试简要总结其他解决方案。公认答案中的问题是,当它工作时,它会失去与地址模型的连接,OP只能处理BSON文档

IMO处理简单的BSON文档是一件痛苦的事情

如果他希望更改回将集合初始化为地址集合,并尝试从db获取任何信息,他将遇到如下错误:

缺少Rainfall MM的序列化信息

他可以通过在Address类上方包含标记来解决此问题,如下所示:

[BsonIgnoreExtraElements]
public class Address 
{
    ...fluff and stuff...
}
现在的问题是,如果他不小心,他可能会在动态添加的属性中丢失所有信息

另一个问题是,如果他动态添加另一个属性。现在,他必须记住,有两个属性不在模型中,这两个属性会被破坏

不管他喜欢与否,为了让他的生活更轻松,他可能不得不修改地址模型。有两种方法,它们的官方文档很棒(我认为),因此我将在这里链接:

如果你问我哪一个更好,我会诚实地告诉你,这取决于你。从文档中,您将看到,如果使用额外的BSON文档属性,则不必担心命名额外属性

这就是我现在所能想到的!
希望它能帮助你

正如@Fidel所要求的那样,我将尝试简要总结其他解决方案。公认答案中的问题是,当它工作时,它会失去与地址模型的连接,OP只能处理BSON文档

IMO处理简单的BSON文档是一件痛苦的事情

如果他希望更改回将集合初始化为地址集合,并尝试从db获取任何信息,他将遇到如下错误:

缺少Rainfall MM的序列化信息

他可以通过在Address类上方包含标记来解决此问题,如下所示:

[BsonIgnoreExtraElements]
public class Address 
{
    ...fluff and stuff...
}
现在的问题是,如果他不小心,他可能会在动态添加的属性中丢失所有信息

另一个问题是,如果他动态添加另一个属性。现在,他必须记住,有两个属性不在模型中,这两个属性会被破坏

不管他喜欢与否,为了让他的生活更轻松,他可能不得不修改地址模型。有两种方法,它们的官方文档很棒(我认为),因此我将在这里链接:

如果你问我哪一个更好,我会诚实地告诉你,这取决于你。从文档中,您将看到,如果使用额外的BSON文档属性,则不必担心命名额外属性

这就是我现在所能想到的!
希望它能帮助你

你把那个字段添加到地址模型了吗?嗨,博尔,没有,我还没有把它添加到地址模型。我正在寻找添加字段dynamicallydid您是否将该字段添加到地址模型?嗨,波尔,不,我还没有将其添加到地址模型。我想添加一个动态的、解释得很好的字段。谢谢,请随意添加您的其他解决方法,因为答案解释得非常好。谢谢,请随意添加您的其他解决方法作为答案,再次成为一个伟大的答案。特别是提到“静态和动态混合”一文。这正是我想做的。再次感谢,这是一个很好的回答。特别是提到“静态和动态混合”一文。这正是我想做的。再次感谢