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

MarkLogic node.js客户端API-使用XML命名空间按元素值查询,node.js,marklogic,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> ...... abcd

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

<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>
......

abcd
123456789
......
然后我想选择z:id=where或z:name=where的记录。我如何使用queryBuilder实现这一点


我已经能够在没有名称空间的情况下成功地进行此类查询。对于名称空间,它的工作方式似乎不同。

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

没有名称空间的名称可以表示为字符串。命名空间名称可以表示为带有uri和名称字符串的两项数组,也可以表示为函数返回的对象


或者,可以使用qb.qname()函数代替数组:
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);
});