如何使用驱动程序在 MongoDB 中进行文档版本控制

问题描述

在应用程序上进行编辑时需要 document 中的 MongoDB 版本控制。

我有很多由不同用户创建的“卡片”。可以随时编辑卡片。应用程序必须保存数据库中的所有更改,以便管理员可以回滚到旧更改。

为此,我尝试复制和现有的 document 代表一张卡片,用不同的 _id 重新插入它,这将被视为版本 0。然后用最新的更改更新复制的一张。这是我希望 db 保存相同 document 的版本 1、2、3。我说相同的文档是因为我将第一个文档的 _id 复制为“source_id”,以便稍后累积结果。

MongoDB.DriverVB.Net 一起使用

虽然这没有用,但这是一种正确的做法吗?

问题:FindOneAndUpdate 返回更新后的 document 并且我丢失了初始数据。

看到 here 关于如何复制文档,但这对我不起作用。看到很多地方提到了 upsert,但以下对我也不起作用。

解决方法

解决办法:

在编辑现有卡片时,创建一个版本增加的新卡片。所以使用 InsertOne 方法。找到现有卡,更改某些字段,以便在插入之前使卡最新。使用允许卡片与其他卡片不同的文件。让我们的用户“状态”,可以是“已发布”/“草稿”/“拒绝”。现在在这种情况下,更改“状态”字段(从“已发布”到“草稿”)并增加“版本”字段。无需使用“FindOneAndUpdate”,因为这会使初始数据丢失。

这种方式在db中会有相同的卡片详细信息,第一张卡片的ID作为不同版本的资源ID。