Marklogic 数组的TDE标量类型
我试图在TDE中将JSON数组对象作为列重新运行。标量类型应该是什么 我使用的是MarkLogic 10.0-1。我的JSON文档是嵌套结构,我想使用TDE和包含数组对象的字段公开行视图。我尝试将scalarType用作字符串,但tde.nodeDataExtract出错。有没有办法克服这个问题 下面给出的示例包含文档和模板Marklogic 数组的TDE标量类型,marklogic,marklogic-9,Marklogic,Marklogic 9,我试图在TDE中将JSON数组对象作为列重新运行。标量类型应该是什么 我使用的是MarkLogic 10.0-1。我的JSON文档是嵌套结构,我想使用TDE和包含数组对象的字段公开行视图。我尝试将scalarType用作字符串,但tde.nodeDataExtract出错。有没有办法克服这个问题 下面给出的示例包含文档和模板 var doc1 = xdmp.toJSON( { "customer":{ "Name": "afgasdfasf
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)
我认为稍微不同的方法会让你达到你想去的地方。让我们将上下文从
/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视图的每个地址获取一行
基于此评论添加信息:“我试图避免连接以及要构建和维护的多个视图。由于索引,每个新模板都会在服务器上产生成本。”
值得记住的是,MarkLogic视图的实现方式不同于关系数据库中的视图。在后台,MarkLogic的视图是使用三重索引实现的,因此无论如何都会有连接。我上面介绍的方法是处理这种情况的常用方法。我认为有一种稍微不同的方法我们将把上下文从
/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视图的每个地址获取一行
基于此评论添加信息:“我试图避免连接以及要构建和维护的多个视图。由于索引,每个新模板都会在服务器上产生成本。”
值得记住的是,MarkLogic视图的实现方式不同于关系数据库中的视图。在后台,MarkLogic的视图是使用三重索引实现的,因此无论如何都会有连接。我上面介绍的方法是处理这种情况的常用方法。谢谢Dave。我正试图避免使用连接作为需要构建和维护多个视图。由于索引,每个新模板都会在服务器上产生成本。有没有办法带来JSON的特定部分(例如,我的示例中的Addr array)作为TDE中的一个专栏?我有一些精通SQL和JSON的应用程序开发人员和测试人员,我正试图为他们提供TDE视图,以快速查询他们的数据,同时对集群施加的压力非常小,这对应用程序的性能至关重要。感谢Dave。我正在努力避免加入以及多个视图ild和维护。由于索引,每个新模板都会在服务器上产生成本。有没有办法带来JSON的特定部分(例如,我的示例中的Addr数组)作为TDE的专栏,我有精通SQL和JSON的应用程序开发人员和测试人员,我试图为他们提供TDE视图,以快速查询他们的数据,同时减少对集群的压力,这对应用程序的性能至关重要。