首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阵列用TDE标量型

阵列用TDE标量型
EN

Stack Overflow用户
提问于 2019-07-11 14:24:58
回答 1查看 214关注 0票数 1

我正在尝试将JSON对象还原为TDE中的列。标量类型应该是什么?

我使用的是MarkLogic 10.0-1.我的JSON文档是嵌套结构的,我希望使用带有包含数组对象的字段的TDE公开行视图。我尝试使用scalarType作为字符串,但是tde.nodeDataExtract错误出现了。有什么办法可以克服这个问题吗?

下面给出的示例文档和模板

代码语言:javascript
复制
    var doc1 = xdmp.toJSON(
      {
        "customer":{
          "Name": "afgasdfasfasffasf", 
          "Addr": [
            {
              "AddrTypeCd": "MailingAddress", 
              "Addr1": "911 FORBES AVE", 
              "Addr2": "SUITE XXX", 
              "CityName": "asdfasfd", 
              "StateProvCd": "PA", 
              "PostalCode": "15219"
            }, 
            {
              "AddrTypeCd": "OfficeAddress", 
              "Addr1": "911 Watson AVE", 
              "Addr2": "SUITE XXX", 
              "CityName": "asdfasfd", 
              "StateProvCd": "CT", 
              "PostalCode": "15119"
            }
          ]
        }
      });

    var rowtde1 = xdmp.toJSON(
    {
      "template":{
        "context":"/customer",
        "rows":[
          {
            "schemaName":"Schemas",
            "viewName":"SampleCustomer",
            "columns":[
              {
                "name":"CustomerName",
                "scalarType":"string",
                "val":"Name"
              },
              {
                "name":"Addr",
                "scalarType":"string",
                "val":"Addr"
              }
            ]
          }
        ]
      }
    }
    );



tde.nodeDataExtract([doc1],[rowtde1]);

执行错误:

代码语言:javascript
复制
[javascript] TDE-EVALFAILED: 
tde.nodeDataExtract([Document({"customer":{"Name":"afgasdfasfasffasf", 
"Addr":[{"AddrTypeCd":"MailingAddress", ...}, ...]}})], 
[Document({"template":{"context":"/customer", "rows": 
[{"schemaName":"Schemas", ...}]}})]) -- Eval for Column Addr='Addr' 
returns multiple values (only one is expected)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 12:46:29

我认为一种稍微不同的方法会让你达到你想去的地方。让我们将上下文从/customer更改为/customer/Addr。现在,TDE可以为数组中的每个项提取一行。(如果您想提取一组不在数组中的数据,则需要使用多个模板来填充索引。

代码语言:javascript
复制
 var doc1 = xdmp.toJSON(
      {
        "customer":{
          "Name": "afgasdfasfasffasf", 
          "Addr": [
            {
              "AddrTypeCd": "MailingAddress", 
              "Addr1": "911 FORBES AVE", 
              "Addr2": "SUITE XXX", 
              "CityName": "asdfasfd", 
              "StateProvCd": "PA", 
              "PostalCode": "15219"
            }, 
            {
              "AddrTypeCd": "OfficeAddress", 
              "Addr1": "911 Watson AVE", 
              "Addr2": "SUITE XXX", 
              "CityName": "asdfasfd", 
              "StateProvCd": "CT", 
              "PostalCode": "15119"
            }
          ]
        }
      });

    var rowtde1 = xdmp.toJSON(
    {
      "template":{
        "context":"/customer/Addr",
        "rows":[
          {
            "schemaName":"Schemas",
            "viewName":"CustomerAddress",
            "columns":[
              {
                "name":"CustomerName",
                "scalarType":"string",
                "val":"../../Name"
              },
              {
                "name":"AddrTypeCd",
                "scalarType":"string",
                "val":"AddrTypeCd"
              },
              {
                "name":"Addr1",
                "scalarType":"string",
                "val":"Addr1"
              },
              {
                "name":"Addr2",
                "scalarType":"string",
                "val":"Addr2"
              },
              {
                "name":"CityName",
                "scalarType":"string",
                "val":"CityName"
              },
              {
                "name":"StateProvCd",
                "scalarType":"string",
                "val":"StateProvCd"
              },
              {
                "name":"PostalCode",
                "scalarType":"string",
                "val":"PostalCode"
              }
            ]
          }
        ]
      }
    }
    );



tde.nodeDataExtract([doc1],[rowtde1]);

这将为添加到Schemas.CustomerAddress视图的每个地址提供一行。

根据这个注释添加信息:“我试图避免使用Joins以及多个视图来构建和维护。每个新的模板,都会因为索引而在服务器上付出代价。”

值得记住的是,MarkLogic视图的实现与关系数据库中的视图不同。在这个框架下,MarkLogic的视图是使用三元索引实现的,所以不管怎么说,都会有连接。我上面介绍的方法是处理这种情况的常用方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56991484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档