问题描述
在应用程序上进行编辑时需要 document
中的 MongoDB
版本控制。
我有很多由不同用户创建的“卡片”。可以随时编辑卡片。应用程序必须保存数据库中的所有更改,以便管理员可以回滚到旧更改。
为此,我尝试复制和现有的 document
代表一张卡片,用不同的 _id
重新插入它,这将被视为版本 0。然后用最新的更改更新复制的一张。这是我希望 db 保存相同 document
的版本 1、2、3。我说相同的文档是因为我将第一个文档的 _id 复制为“source_id”,以便稍后累积结果。
将 MongoDB.Driver
与 VB.Net
一起使用
虽然这没有用,但这是一种正确的做法吗?
问题:FindOneAndUpdate
返回更新后的 document
并且我丢失了初始数据。
看到 here 关于如何复制文档,但这对我不起作用。看到很多地方提到了 upsert
,但以下对我也不起作用。
解决方法
解决办法:
在编辑现有卡片时,创建一个版本增加的新卡片。所以使用 InsertOne
方法。找到现有卡,更改某些字段,以便在插入之前使卡最新。使用允许卡片与其他卡片不同的文件。让我们的用户“状态”,可以是“已发布”/“草稿”/“拒绝”。现在在这种情况下,更改“状态”字段(从“已发布”到“草稿”)并增加“版本”字段。无需使用“FindOneAndUpdate”,因为这会使初始数据丢失。
这种方式在db中会有相同的卡片详细信息,第一张卡片的ID作为不同版本的资源ID。