首页 > 解决方案 > Ravendb 索引 JSON 参考问题

问题描述

我们最近从 Raven DB 3.5.9 迁移到 5.1.2。我们有集合字段,其中包含类似的文档

{
    "$id": "1",
    "FieldName": "FName",
    "Rules": [
        {
            "$id": "2",
            "VariantId": "0ad608a6-d489-4e73-b5de-63803fae7ad5",
            "CoveredPlanTypes": [
                "ABC",
                "DEF"
            ]
            "Formatters": [],
            "Transformations": [
                {
                    "$id": "3",
                    "ConditionExpression": {
                        "$id": "4",
                        "SubType": "ConditionCombination",
                        "Name": "AND",
                        "Type": "ConditionComputation"
                    },
                    "Variants": {
                        "$id": "20"
                    }
                },
                {
                    "$id": "21",
                    "ConditionExpression": {
                        "$id": "22",
                        "SubType": "ConditionCombination",
                        "Name": "AND",
                        "Type": "ConditionComputation"
                    },
                    "Variants": {
                        "$id": "41"
                    }
                }
            ]
        },
        {
            "$id": "557",
            "VariantId": "8299a037-2e38-4480-bad9-cf9137786876",
            "CoveredPlanTypes": [
                "ABC"
            ],
            "Formatters": [],
            "Transformations": [
                {
                    "$ref": "3"
                },
                {
                    "$ref": "21"
                },
                {
                    "$id": "558",
                    "ConditionExpression": {
                        "$id": "559",
                        "SubType": "ConditionCombination",
                        "Name": "AND",
                        "Type": "ConditionComputation"
                    },
                    "Variants": {
                        "$id": "611"
                    }
                }
            ]
        }
    ],
    "CreatedOnInstant": "2020-12-16T21:58:49.2241825Z",
    "@metadata": {
        "@collection": "Fields",
        "Raven-Clr-Type": "Domain.Field.Field, Domain",
    }
}

我们有以下索引类

    public class Field_RuleVariantsByPlanType : AbstractIndexCreationTask<Field, Rule>
    {
        public Field_RuleVariantsByPlanType()
        {
            Map = fields => from field in fields
                            from ruleVariant in field.Rules
                            from planType in ruleVariant.CoveredPlanTypes.DefaultIfEmpty("")
                            select new Rule
                            {
                                Id = field.Id,
                                FieldName = field.FieldName,
                                CoveredPlanType = planType,
                                Formatters = ruleVariant.Formatters,
                                Transformations = ruleVariant.Transformations,
                            };
            StoreAllFields(FieldStorage.Yes);
        }
}

当我们尝试这样做时var rule = await _session.Query<Rule, Field_RuleVariantsByPlanType>().Where(x => x.Id == "fields/7809").ProjectInto<Rule>().ToListAsync();,我们没有解析第二条规则中加载的转换的引用,它们出现为 null 即"Transformations": [ { "$ref": "3" }, { "$ref": "21" },好像我们检查var rule = await _session.LoadAsync<Field>("fields/7809");json 中的引用已解析,这次我们在第二条规则中获得了正确的 3 个转换。请帮忙

标签: ravendb

解决方案


推荐阅读