【问题标题】:Querying dynamic properties in RavenDB在 RavenDB 中查询动态属性
【发布时间】:2012-10-31 13:18:12
【问题描述】:

我在 Raven 中查询动态属性时遇到了一些问题。

这是我的课程:

    public class Parent
    {
        public string ID { get; set; }
        public dynamic Child { get; set; }
    }

    public class Son
    {
        public int A { get; set; }
        public Guid Key { get; set; }
    }

    public class Daughter
    {
        public int A { get; set; }
        public Guid Key { get; set; }
    }

我要做的是索引其孩子是儿子但不是女儿的父母,并按子属性“A”或“Key”进行索引。在我的例子中,子类不能从接口继承,因为真正的子类看起来完全不同。这些类是为匹配场景的测试而构建的。

到目前为止我建立的索引是这样的:

    public class DynamicIndex : AbstractIndexCreationTask
    {
        public override Raven.Abstractions.Indexing.IndexDefinition CreateIndexDefinition()
        {
            return new IndexDefinition()
            {
                Map = @"from doc in docs.Parent select new { A = doc.Dynamic.A, B = doc.Dynamic.B }"
            };
        }
    }

此索引有效,但我似乎无法过滤掉匹配一种类型而不匹配另一种类型的孩子。 Child 的序列化 JSON 包含一个名为“$type”的属性,它是该类型的全名。我的直觉告诉我用它来区分子类型,但我不知道如何访问它。

如何扩展我的索引映射以包含“$test”属性,或者是否有其他方法可以过滤匹配特定类型的子项?

【问题讨论】:

    标签: c# ravendb


    【解决方案1】:
    Map = @"from doc in docs.Parent select new { A = doc.Dynamic.A, B = doc.Dynamic.B, Type = doc.Dynamic[""$type""] }"
    

    应该有效

    【讨论】:

    • 谢谢!不是我正在寻找的答案,但它比我想象的要好。是否可以在 where 子句中访问 $type ?那是我最初想放置类型过滤器的地方,但我似乎无法让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多