我们正在构建一个以 ML 作为后端数据库的企业应用程序。要求之一是在不同文档中查找 XML 中特定元素的不同值。
我可以使用结构化查询/组合查询获取不同的entity_type吗
以下所有文档都是实体集合的一部分:
文件1
<xml>
<entities>
<entity_name>Imprezza</entity_name>
<entity_type>Car</entity_type>
<entity_color>Red</entity_color>
<entities>
<xml>
Run Code Online (Sandbox Code Playgroud)
文件2
<xml>
<entities>
<entity_name>Ducati</entity_name>
<entity_type>Bike</entity_type>
<entity_color>White</entity_color>
<entities>
<xml>
Run Code Online (Sandbox Code Playgroud)
文件3
<xml>
<entities>
<entity_name>Lancia</entity_name>
<entity_type>Car</entity_type>
<entity_color>Red</entity_color>
<entities>
<xml>
Run Code Online (Sandbox Code Playgroud)
文件4
<xml>
<entities>
<entity_name>Scania</entity_name>
<entity_type>Truck</entity_type>
<entity_color>Black</entity_color>
<entities>
<xml>
Run Code Online (Sandbox Code Playgroud)
要求:给我集合中所有不同的entity_type
结果:汽车、自行车、卡车
PS:需要在Java层获取结果。我们目前有一个 API,可以根据输入生成 MarkLogic 组合查询(结构化查询 + 选项查询)。我可以使用结构化查询/组合查询获取不同的实体吗?
我正在尝试更新与当前数据库不同的数据库中的文档。但它给了我以下错误-
XDMP-UPEXTNODES: xdmp:node-replace(fn:doc("/C:/Users/Downloads/abc.csv-0-2")/*:envelope/*:root/*:Status, <Status>1000</Status>) -- Cannot update external nodes
Run Code Online (Sandbox Code Playgroud)
我正在使用下面的代码-
let $temp :=
for $i in $result
let $error := $i/*:envelope/*:ErrorMessage
let $status := $i/*:envelope/*:Status
return
if(fn:exists($i) eq fn:true()) then (
xdmp:invoke-function(
function() {
xdmp:node-replace($status,<Status>1000</Status>),
xdmp:node-replace($error,<ErrorMessage>Change Error in other Database-2</ErrorMessage>)
},
<options xmlns="xdmp:eval">
<database>{xdmp:database("DATABASE-2")}</database>
</options>))
else ()
Run Code Online (Sandbox Code Playgroud)
我想更新Database-2的错误和状态节点。
$result 是我从Database-2获取的文档。
我从Database-1运行此代码
有什么建议 ?
我编写了一个不使用CQ Web应用程序返回的XQuery.
我认为下面会工作,但服务器仍然挂起.
declare namespace data = "http://marklogic.com/ps/data";
/data:doc/data:provider[ 1 to 5 ]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?如果我在树上搜索,它就不会挂起.我正在尝试探索此时的数据结构,因此我需要至少返回一个提供程序.
提前致谢,
圭多
我有一个文件夹,其中包含doc,docx,xlsx,pdf和txt文件.我使用这个XQuery将所有这些文件上传到Marklogic: -
for $d in xdmp:filesystem-directory("C:\uploads")//dir:entry
return
xdmp:document-load($d//dir:pathname,
<options xmlns="xdmp:document-load">
<uri>{concat("/documents/", string($d//dir:filename))}</uri>
<permissions>{xdmp:default-permissions()}</permissions>
<collections>{xdmp:default-collections()}</collections>
<format>binary</format>
</options>)
Run Code Online (Sandbox Code Playgroud)
我还为我的数据库安装了内容处理.现在,当我上传doc和pdf文件时,它们会转换为xml和xhtml文件.但是docx,xlsx和txt没有被转换.有人可以告诉我为什么这些文件没有被转换?
例如
myArr= [
{name:"Joe", id:3, date: "2012.10.12"},
{name:"Ed", id:43, date: "2012.02.12"},
{name:"Mark", id:22, date: "2012.02.11"}
];
Run Code Online (Sandbox Code Playgroud)
那么如何按日期对此数组进行排序?
这只是一个小例子,但它就像数组中的1000个对象.我在互联网上搜索过并发现了一些使用该sort()功能的例子,但它在我的大数组中不起作用.
是否可以使用
带有Node.js的MarkLogic 搜索二进制文件内容,如PDF ?如何使用带有Node.js的MarkLogic检索存储在数据库中的PDF文档?
在我的项目中,我们有一个需要维护文档历史记录或版本的需求。就像我们使用相同的URI插入文档一样,它将旧文档替换为新文档。但是我们想保留旧版本号。
我们如何在Marklogic中实现这一目标?
我正在使用我正在使用的代码mem:node-replace().代码如下─
let $a :=
for $i in $res
let $uri := fn:base-uri($i)
let $doc := fn:doc($uri)
return if(fn:exists($doc) eq fn:true())
then (
(
mem:node-replace($doc//*:NODE1,<NODE1>{doc($id)//*:NODE1}</NODE1>),
mem:node-replace($doc//*:NODE2,<NODE2>{$curr_date}</NODE2>)
)
)
else ()
return $a
Run Code Online (Sandbox Code Playgroud)
我能够看到值在LOG中被替换,但它没有反映到数据库中.我应该如何在我的数据库中提交/保存此节点替换?
有什么建议 ?