0

首先警告:我对文档数据库完全陌生,所以我所有的“理解”都来自文档和博客文章,这是我的第一次动手工作。

我想实现以下目标:

  1. 存储不同类型的文档并管理文档周围的一些元数据。
  2. 通过以下方式查询数据库:
    • 元数据
    • 元数据和文档属性
    • 特定文档类型的元数据
  3. 无需加载整个文档即可更新元数据。

我的理解是,我在这里有两个选择。

将元数据与文档一起保存。

public class Metadata
{
    public DateTime ValidFrom { get; set;}
    public DateTime? ValidTo { get; set;}
}

public class DocumentWithMetadata<T>
{
    public T Document { get; set;}
    public Metadata Metadata { get; set;}
}

拥有一个包含元数据属性的索引,并用于LiveProjections在不加载整个文档的情况下加载文档的元数据。对于元数据的更新,请使用 PATCH。根据文档..."is considered to be an expert feature and generally should not be used as a general purpose solution. If you have reached a scenario where you are considering using this, you might want to recheck your data model and see if it can be optimized to prevent usage of the Patching API"

另一种选择是将元数据保存为独立文档。

public class Metadata
{
    public DateTime ValidFrom { get; set;}
    public DateTime? ValidTo { get; set;}
}

public class DocumentWithMetadata<T>
{
    public T Document { get; set;}
    public string MetadataId { get; set;}
}

在这种方法中,我可以使用该Related Document Indexing功能并将元数据属性“提升”到文档的索引中。

鉴于T1Raven 类型的文档将创建一个名为 的集合,如果所有元数据都在一个集合中DocumentWithMetadataOfT1,我将如何查询T1 文档的元数据?

我考虑了其他几种方法,例如将文档类型属性添加到元数据或反转关系,但所有这些方法看起来都像是 hack。

必须有更好的方法..还是没有?

4

1 回答 1

1

您实际尝试做的事情非常令人困惑。主要是因为 Raven 已经拥有自己的文档和元数据概念,并且出于某种原因您正在引入自己的概念。

根据您添加到元数据中的ValidFromValidTo字段,我猜您正在尝试某种双时效性或“历史表”。这实际上已经完成,所以如果这就是你所追求的,那么你应该使用我的Temporal Versioning Bundle

于 2013-09-27T16:10:26.373 回答