marklogic 使用 node.js client api query doc with sub element
marklogic use node.js client api query doc with sub element
我将 marklogic 9 与 Node.js 客户端 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
的文档?
您可以添加 path range index on name
and query with pathRangeQuery 来获取您的文件。
您的路径范围索引看起来类似于:
- 标量类型:字符串
- 路径表达式:company/parentCompany/name
您可以在管理界面的 databases/your-db/Path 范围索引下添加路径范围索引。
添加索引后,此 xquery 应该会获取您的文档:
cts:search(fn:doc(),
cts:and-query((
cts:path-range-query("company/parentCompany/name", "=", "Company name")
))
)
抱歉没有 javscript 代码示例,但我还没有使用 nodejs api。
一种方法是指定查询范围:
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
希望对您有所帮助,
我将 marklogic 9 与 Node.js 客户端 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
的文档?
您可以添加 path range index on name
and query with pathRangeQuery 来获取您的文件。
您的路径范围索引看起来类似于:
- 标量类型:字符串
- 路径表达式:company/parentCompany/name
您可以在管理界面的 databases/your-db/Path 范围索引下添加路径范围索引。
添加索引后,此 xquery 应该会获取您的文档:
cts:search(fn:doc(),
cts:and-query((
cts:path-range-query("company/parentCompany/name", "=", "Company name")
))
)
抱歉没有 javscript 代码示例,但我还没有使用 nodejs api。
一种方法是指定查询范围:
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
希望对您有所帮助,