MarkLogic - Node.js客户端API - QueryBuilder -需要页面数据和查询的完整计数

MarkLogic - Node.js Client API - QueryBuilder - Need page of data and full count for query

本文关键字:查询 数据 客户端 js Node API QueryBuilder MarkLogic      更新时间:2023-09-26

如果我在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条记录。它也会给我一个50的计数,即使有1000条记录与这个查询相关。

如果我用

执行查询
.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项将包含文档的全部内容。