我将marklogic 9与Node.js Client Api一起使用。当我尝试使用queryBuilder搜索文档时,发现一些问题。
这是我的文档数据
company: {
uuid : uuid,
name : comapnyName,
parentCompany: {
uuid: uuid,
name: parentCompanyName,
}
}
我想在母公司下找到所有公司,但不包括母公司。 我用
db.documents.query(
this.qb.where(
this.qb.directory('/company/'),
this.qb.collection('company'),
this.qb.word('name',parentCompanyName),
)
).result();
此查询查找所有包含母公司的公司。
我认为它找到了company.name
和company.parentCompany.name
。
如何使用BuilderQuery通过company.parentCompany.name
查找文档?
答案 0 :(得分:0)
您可以在name
上添加path range index并使用pathRangeQuery查询以获取文档。
您的路径范围索引看起来类似于:
您可以在管理界面中的databases / your-db / Path Range Indexes下添加路径范围索引。
添加索引后,此xquery应该会获取您的文档:
cts:search(fn:doc(),
cts:and-query((
cts:path-range-query("company/parentCompany/name", "=", "Company name")
))
)
很抱歉,没有javscript代码示例,但我尚未使用nodejs api。
答案 1 :(得分:0)
一种方法是为查询指定范围:
db.documents.query(
qb.where(
qb.directory('/company/'),
qb.collection('company'),
qb.scope('parentCompany', qb.word('name',parentCompanyName))
)
).result();
此查询与name
属性下任意位置的parentCompany
属性匹配。这样的查询等效于服务器端JavaScript中的cts.jsonPropertyScopeQuery()
函数。有关范围查询构建器功能的更多信息,请参见:
http://docs.marklogic.com/jsdoc/queryBuilder.html#scope
路径范围索引替代项指定显式路径而不是范围关系。如果范围关系不足以消除误报,那是正确的方法。正如Wagner指出的那样,前提条件是附加索引。该查询将类似于以下内容:
db.documents.query(
qb.where(
qb.directory('/company/'),
qb.collection('company'),
qb.word(qb.pathIndex('company/parentCompany/name'),parentCompanyName)
)
).result();
有关pathIndex查询构建器功能的更多信息,请参见:
http://docs.marklogic.com/jsdoc/queryBuilder.html#pathIndex
希望有帮助,