基于RavenDB的嵌套文档动态字段索引

基于RavenDB的嵌套文档动态字段索引,ravendb,Ravendb,如何处理嵌套文档上的动态字段索引,以便可以使用RavenDB查询深度图对象的动态字段 使用文档中的示例: 如果一个产品属性的值也是一个产品呢?设想一个具有动态字段的CMS,其中所有内容都是一个内容,根实体内容(对于DDD人员)可能嵌入另一个内容,等等(深度图) 这一点非常重要,因为聚合子内容而不是与它们相关(就像在关系数据库世界中那样),是文档数据库的核心概念之一。如果数据符合某种模式,例如分层数据,则可以根据递归模式进行索引 你已经知道怎么做了。您可以将这些技术结合起来,得到最多可以描述的任何

如何处理嵌套文档上的动态字段索引,以便可以使用RavenDB查询深度图对象的动态字段

使用文档中的示例:

如果一个产品属性的值也是一个产品呢?设想一个具有动态字段的CMS,其中所有内容都是一个内容,根实体内容(对于DDD人员)可能嵌入另一个内容,等等(深度图)


这一点非常重要,因为聚合子内容而不是与它们相关(就像在关系数据库世界中那样),是文档数据库的核心概念之一。

如果数据符合某种模式,例如分层数据,则可以根据递归模式进行索引

你已经知道怎么做了。您可以将这些技术结合起来,得到最多可以描述的任何模式

如果数据是任意动态的(即,您无法提前知道对象结构),那么您将很难到达任何特定字段,因为您无法描述如何访问它


您不能同时是任意动态的和完全可索引的。

感谢递归函数。我不确定它是否适用于我的场景。无论如何,我用另一种方法来解决我的问题,是的,我的问题是关于任意动态数据。我找到的解决方案是使用RavenDB附带的HTTP API。使用HTTP API如何改变索引内容?好问题。。。答案是我不再存储C#类了。使用HTTP API,我可以生成(在运行时-以前不知道这个结构)一个定义良好的结构(JSON对象),表示嵌套在名称/值集合中的数据(如引用的产品示例)在我的C#模型中,如果你愿意,我认为你仍然可以用C#中的
动态
扩展对象
来实现这一点。http api有时会变得笨拙。我不想仅仅为了这个就把c#client扔掉。这也是我一开始的想法,但不,我不能。动态对象或ExpandooObject在运行时无助于构建数据结构。不能在运行时迭代嵌套的名称/值集合并生成动态对象。