首页 > 解决方案 > 文档版本控制模式的同一文档的两个集合上的不同键

问题描述

我有一个需要跟踪文档历史记录的 C# 应用程序,所以我想实现Document Versioning Pattern。但是,我对如何在 hist 集合上执行 _id 感到迷茫。

假设我的文档如下所示:

{
  _id : "abc",
  rev : 3, 
  loc : "root"
  dat : {
    ..
  }
}

我尝试的是两个集合,livehist. 但是如何将 hist 表上的 _id 设置为 on{ _id, rev }或生成的 ObjectId?否则,尝试将“abc”的下一个 rev 插入 hist 会导致重复键错误。

c# 类上的属性不起作用,因为这会导致两个集合上的 _id 相同。

我还考虑将它们放入一个集合中,但是如果我需要所有带有 loc=root 的活动文档,这会使查询变得相当复杂。

我在这里有点难过,文章没有提到这个明显的问题。

标签: c#mongodb

解决方案


您不要在历史收集中使用 _id 作为 _id。每个历史文档都可以有自己唯一的 _id

历史

{
  _id: 'own id',  //unique
  ref: '_id of live',
  rev: 3,
  changes: '...'

}

推荐阅读