【问题标题】:MarkLogic - node.js Client API - queryBuilder query array of IDsMarkLogic - node.js 客户端 API - queryBuilder 查询 ID 数组
【发布时间】:2015-05-21 02:47:12
【问题描述】:

这个问题类似于: MarkLogic - XQuery - cts:element-range-query using variable length sequence or map

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

我有 100,000 条记录的集合,结构如下:

<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>

我已经在 id 上设置了一个范围索引。

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

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

【问题讨论】:

    标签: node.js marklogic


    【解决方案1】:

    没关系,我找到了问题所在。

    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) 不返回任何文档,通常只有在获取构面时才会这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2017-03-25
    • 1970-01-01
    相关资源
    最近更新 更多