在 RavenDB 中将相关文档表示为一个对象

Posted

技术标签:

【中文标题】在 RavenDB 中将相关文档表示为一个对象【英文标题】:Expressing related documents as one object in RavenDB 【发布时间】:2016-05-23 15:01:01 【问题描述】:

我刚刚开始使用 RavenDB,并研究了有关相关文档的文档。我正在考虑开发的系统有两个类,Family 和 Member。

一个家庭可以有多个成员,一个成员可以属于多个家庭。成员也可以单独检索和更新。根据我正在阅读的内容,对此进行建模的正确方法是为家庭提供一份文件,为成员准备一份文件。并让 Family 包含 MemberIds 列表。

太棒了!

RavenDB 网站https://ravendb.net/docs/article-page/3.0/csharp/indexes/querying/handling-document-relationships 上描述了上述方法

但是,这意味着您要分别处理每个对象。您必须使用单独的 Load 命令单独“获取”每个 Member 对象。即使您使用 Include 将所有相关对象“预取”到会话中,您仍然必须为每个对象发出单独的 Load 命令。

这意味着 Family 对象不包含 Member 对象列表,而仅包含 MemberId 列表。

这是我的问题:有没有办法让 RavenDB 从相关文档中返回一个复杂对象,这样当您返回一个 Family 对象时,它将包含相关成员对象的列表?我知道如果您将成员对象直接放在家庭对象中,这是可以做到的,但这将不允许成员对象在其他地方(其他家庭)使用。

此外,有没有办法告诉 RavenDB 将某些嵌入列表“解构”到相关文档中,而不是将其存储在同一个文档中?

这似乎是一件很有帮助的事情。

【问题讨论】:

【参考方案1】:

你可以使用变压器,是的。

【讨论】:

谢谢!我看到了如何使用转换器将数据提取为所需的格式,但是如何保存数据呢?换句话说,如果你传入一个复杂的模型并将其中的某些元素保存为相关文档,是否可以反过来呢? 不,这是不可能的。您的模型可能存在问题。

以上是关于在 RavenDB 中将相关文档表示为一个对象的主要内容,如果未能解决你的问题,请参考以下文章

核心数据相关对象被移除

.NET 文档数据库 RavenDB 4.0 发布

#yyds干货盘点# RavenDB 文档建模--琐碎的注意事项--处理无限增长的文档

从嵌入式 RavenDB 中的索引检索结果时出现问题

Core Data 一对多关系:在 UITableView 中将所有相关对象列为节标题

如何在 RavenDB 等面向文档的数据库系统中对分层和关系数据进行建模?