MarkLogic-node.js客户端API-queryBuilder ID查询数组

MarkLogic-node.js客户端API-queryBuilder ID查询数组,node.js,marklogic,Node.js,Marklogic,这个问题类似于: 但是这次我需要使用node.js客户端API中的queryBuilder进行查询 我收集了100000条记录,结构如下: <record> <pk>1</pk> <id>1234</id> </record> <record> <pk>2</pk> <id>1234</id> </record> <

这个问题类似于:

但是这次我需要使用node.js客户端API中的queryBuilder进行查询

我收集了100000条记录,结构如下:

<record>
    <pk>1</pk>
    <id>1234</id>
</record>
<record>
    <pk>2</pk>
    <id>1234</id>
</record>
<record>
    <pk>3</pk>
    <id>5678</id>
</record>
<record>
<pk>4</pk>
    <id>5678</id>
</record>

1.
1234
2.
1234
3.
5678
4.
5678
我已经在id上设置了范围索引

我想使用queryBuilder node.js客户端API编写一个查询,该API允许我传入一个ID数组并获取一个记录列表

它需要: 1) 查询特定集合
2) 利用范围索引提高性能

不管怎样,我解决了问题

db.db.documents.query(
  q.where(
    q.collection('Records'),
    q.or(
        q.value('id', ['1', '2'])
    )
  ).slice(1, 99999999)
)
我最初尝试将一个数组传递到q.value,但结果有限(当我预期为20时得到了10)。所以我觉得我做错了

事实证明,我只需要将where子句切分为包含所有内容的部分。显然,如果你不指定取多少,默认值为10


还要注意的是,当我尝试使用.slice(0)时,我遇到了一个例外。

因为数据库可以包含比在单个请求中检索更多的文档,所以您应该指定要检索的文档的最大数量,这样您的解决方案才是正确的;顺便说一句,.slice(0)不返回任何文档,通常只有在获取facet时才会返回。