我正在尝试将JSON对象还原为TDE中的列。标量类型应该是什么?
我使用的是MarkLogic 10.0-1.我的JSON文档是嵌套结构的,我希望使用带有包含数组对象的字段的TDE公开行视图。我尝试使用scalarType作为字符串,但是tde.nodeDataExtract错误出现了。有什么办法可以克服这个问题吗?
下面给出的示例文档和模板
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] 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)发布于 2019-07-12 12:46:29
我认为一种稍微不同的方法会让你达到你想去的地方。让我们将上下文从/customer更改为/customer/Addr。现在,TDE可以为数组中的每个项提取一行。(如果您想提取一组不在数组中的数据,则需要使用多个模板来填充索引。
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的视图是使用三元索引实现的,所以不管怎么说,都会有连接。我上面介绍的方法是处理这种情况的常用方法。
https://stackoverflow.com/questions/56991484
复制相似问题