node.js - MarkLogic node.js 客户端 API - 使用 XML 命名空间按元素值查询

标签 node.js marklogic

假设我有一个记录结构如下的集合:

<m:m xmlns:m="http://www.m.com/">
    <m:data>
        <z:term xmlns:z="http://z.come/schema/index.html#">
            <z:name>abcd</z:name>
            <z:id>123456789</z:id>
......

然后我想选择 z:id = 任意或 z:name = 任意的记录。我如何使用 queryBuilder 来做到这一点?

当没有命名空间时,我已经能够成功地进行此类查询。对于命名空间,它的工作方式似乎不一样。

最佳答案

您需要使用 QueryBuilder.element() 指定目标元素。 element() 的文档说有三种方法可以指定元素的 QName:

A name without a namespace can be expressed as a string. A namespaced name can be expressed as a two-item array with uri and name strings or as an object returned by the queryBuilder#qname function.

var ml = require('marklogic');
var conn = require('./config.js').connection;
var db = ml.createDatabaseClient(conn);
var qb = ml.queryBuilder;

db.documents.query(
  qb.where(
    qb.value(qb.element(['http://z.come/schema/index.html#', 'id']), '123456789')
  )
).result()
.then(function(docs) {
  console.log('This search found: ' + JSON.stringify(docs[0]));
})
.catch(function(error) {
  console.log('something went wrong: ' + error);
});

关于node.js - MarkLogic node.js 客户端 API - 使用 XML 命名空间按元素值查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577354/

相关文章:

Marklogic 使用 cts 计数旧文档 :search over FLWOR

java - MarkLogic 8 Java API - 以编程方式添加元素范围索引

marklogic - 为什么需要管理员才能查看 REST 扩展的语义库?

json - MarkLogic - 集合和索引之间的最佳解决方案

javascript - Node.js - 为什么我的两个查询没有执行?

node.js - NodeJS 中的多个 await 调用错误处理

node.js - 为什么我的自定义错误对象会被 Express 路由器转换为字符串?

javascript - 如何每周日更新日期?

node.js - 当客户端刷新或打开新页面时,Socket.io 在客户端保持连接

MarkLogic Node.js。如何在查询中指定多个集合