首先警告:我对文档数据库完全陌生,所以我所有的“理解”都来自文档和博客文章,这是我的第一次动手工作。
我想实现以下目标:
- 存储不同类型的文档并管理文档周围的一些元数据。
- 通过以下方式查询数据库:
- 元数据
- 元数据和文档属性
- 特定文档类型的元数据
- 无需加载整个文档即可更新元数据。
我的理解是,我在这里有两个选择。
将元数据与文档一起保存。
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
功能并将元数据属性“提升”到文档的索引中。
鉴于T1
Raven 类型的文档将创建一个名为 的集合,如果所有元数据都在一个集合中DocumentWithMetadataOfT1
,我将如何仅查询T1 文档的元数据?
我考虑了其他几种方法,例如将文档类型属性添加到元数据或反转关系,但所有这些方法看起来都像是 hack。
必须有更好的方法..还是没有?