MarkLogic - Node.js 客户端 API - QueryBuilder - 需要数据页和查询的完整计数
MarkLogic - Node.js Client API - QueryBuilder - Need page of data and full count for query
如果我在 node.js 客户端 API 中有以下 queryBuilder 查询:
db.client.documents.query(
q.where(
q.collection('records'),
q.or(
q.value('id', [1,2,3,4])
)
).slice(0, 50)
)
这会给我与此查询相关的前 50 条记录。即使有 1000 条记录与此查询相关,它也会给我计数 50。
如果我使用以下方式进行查询:
.withOptions({categories: 'none'})
我可以看到查询的真实计数。
是否有内置选项可以给我单页数据并获取查询的完整计数?
为了支持分页,您必须先调用 .withOptions({categories: 'none'}) 获取记录总数,然后调用 .withOptions({categories: 'content' }) 获取实际内容。以下是关于分页的非常好的文章:
http://www.tamas.io/marklogic-and-node-js/
据我所知,没有内置方法可以同时获取总计数和数据。
这将满足您的需求:
db.documents.query(
qb.where(
qb.term('apple')
)
.slice(1, 10)
.withOptions({categories: 'content', metrics: true})
).result()
.then(function(docs) {
console.log('I have ' + docs.length + ' docs');
})
.catch(function(error) {
console.log('something went wrong');
});
在 then
函数中,docs 将是一个长度为 11 的数组。数组中的第一项是指标:
{
"metrics": {
"query-resolution-time": "PT0.00179S",
"snippet-resolution-time": "PT0.00505S",
"total-time": "PT0.008708S"
},
"page-length": 10,
"results": [],
"snippet-format": "snippet",
"start": 1,
"total": 20
}
结果数组将包含片段。数组的第 1 到 10 项将包含文档的全部内容。
如果我在 node.js 客户端 API 中有以下 queryBuilder 查询:
db.client.documents.query(
q.where(
q.collection('records'),
q.or(
q.value('id', [1,2,3,4])
)
).slice(0, 50)
)
这会给我与此查询相关的前 50 条记录。即使有 1000 条记录与此查询相关,它也会给我计数 50。
如果我使用以下方式进行查询:
.withOptions({categories: 'none'})
我可以看到查询的真实计数。
是否有内置选项可以给我单页数据并获取查询的完整计数?
为了支持分页,您必须先调用 .withOptions({categories: 'none'}) 获取记录总数,然后调用 .withOptions({categories: 'content' }) 获取实际内容。以下是关于分页的非常好的文章:
http://www.tamas.io/marklogic-and-node-js/
据我所知,没有内置方法可以同时获取总计数和数据。
这将满足您的需求:
db.documents.query(
qb.where(
qb.term('apple')
)
.slice(1, 10)
.withOptions({categories: 'content', metrics: true})
).result()
.then(function(docs) {
console.log('I have ' + docs.length + ' docs');
})
.catch(function(error) {
console.log('something went wrong');
});
在 then
函数中,docs 将是一个长度为 11 的数组。数组中的第一项是指标:
{
"metrics": {
"query-resolution-time": "PT0.00179S",
"snippet-resolution-time": "PT0.00505S",
"total-time": "PT0.008708S"
},
"page-length": 10,
"results": [],
"snippet-format": "snippet",
"start": 1,
"total": 20
}
结果数组将包含片段。数组的第 1 到 10 项将包含文档的全部内容。