MongoDB:使用C#驱动程序更新除#id之外的整个文档

MongoDB:使用C#驱动程序更新除#id之外的整个文档,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我必须更新除_id之外的所有字段。 我想避免手动更新16个字段。。。 所有新字段都存储在BsonDocument中 感谢您的想法当我正确理解您时,您有一个包含新数据的文档B,您希望它完全取代文档a 在这种情况下,您可以将文档B的_id字段明确设置为文档A的_id字段的值。然后保存文档B时,它将替换数据库中的文档A 当保存的文档具有现有文档的id时,数据库会将其视为该文档的新版本,而不是新文档。正如@Philipp所暗示的,有一种方法可以做到这一点。实际上,您可以使用save函数(),该函数将在数

我必须更新除_id之外的所有字段。 我想避免手动更新16个字段。。。 所有新字段都存储在BsonDocument中


感谢您的想法

当我正确理解您时,您有一个包含新数据的文档B,您希望它完全取代文档a

在这种情况下,您可以将文档B的_id字段明确设置为文档A的_id字段的值。然后保存文档B时,它将替换数据库中的文档A


当保存的文档具有现有文档的id时,数据库会将其视为该文档的新版本,而不是新文档。

正如@Philipp所暗示的,有一种方法可以做到这一点。实际上,您可以使用
save
函数(),该函数将在数据库端执行他为您所说的操作

假设你有一份文件:

{
    _id: {},
    d: 1
}
如果
\u id
已经存在,它将用此文档替换以前的文档


整洁,是吧?

使用它不危险吗?保存?我认为将任意Id值注入文档并将其作为http PUT发送到服务器非常容易。如果不先检查是否存在现有文档,该操作可以作为POST结束,但没有POST后面方法的控制器逻辑。在没有进一步信息的情况下,我使用.Update和.Replace作为C#driver。@Besrl这是一个很好的观点,它可能非常危险,您应该始终确保文档的#id由您的应用程序逻辑验证和检查,与其他内容一起,还有
Update.Replace
builder,适用于需要执行更新的情况,例如乐观并发版本控制。如果除_id之外的字段上有唯一索引,则Save()也不起作用。