首先是一个警告:我对文档数据库完全陌生,所以我的所有“理解”都来自文档和博客文章,这是我的第一次实践工作。
我想实现以下目标:
我的理解是我在这里有两个选择。
将元数据与文档一起保存。
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文档的元数据集合?
我想过其他一些方法,例如向元数据添加文档类型属性或反转关系,但所有这些方法看起来都像黑客一样。
必须有更好的方式......或不是吗?
答案 0 :(得分:1)
你实际上想要做的事情让人很困惑。主要是因为Raven已经拥有了自己的文档和元数据概念,并且由于某些原因你引入了自己的概念。
根据您要添加到元数据的ValidFrom
和ValidTo
字段,我的猜测是您正在尝试某种双时效或“历史表”。这实际上已经完成了,所以如果那就是你的目标,那么你应该使用我的Temporal Versioning Bundle。