查询 couchbase 数组列

Querying couchbase array column

我正在尝试使用 UNNESt 查询 couchbase 中的数组列。但是出现以下错误。

查询:

SELECT * FROM alerts UNNEST timestamps WHERE timestamps '2018-04-21T06:37:44.512Z' BETWEEN '2018-04-21T08:37:44.512Z'

错误消息:

[
  {
    "code": 3000,
    "msg": "syntax error - at '2018-04-21T06:37:44.512Z'",
    "query_from_user": "SELECT * FROM `alerts` UNNEST timestamps WHERE timestamps '2018-04-21T06:37:44.512Z'  BETWEEN '2018-04-21T08:37:44.512Z'"
  }
]

Table内容: SELECT * 来自 'alerts';

[
  {
    "alerts": {
      "alertid": "3c217a81450278b38f3ad1a7260955d4",
      "severity": 3,
      "tally": 540,
      "timestamps": [
        "2018-04-21T07:37:44.512Z"
      ],
      "type": "ALERTS"
    }
  }
]

我不确定你想要得到什么结果,但首先我看到一个语法错误:我假设你试图在两个日期之间找到一些东西,但你有日期文字,然后 BETWEEN 然后是另一个日期文字。这不是正确的语法。它更像是 BETWEEN <literal> AND <literal>.

我的第一个猜测,因为您正在尝试 UNNEST,也许您正在尝试进行文档内交叉联接,返回具有适合某个范围的时间戳的联接产品,您可以这样做:

SELECT a.*, t
FROM alerts a
UNNEST a.timestamps t
WHERE t BETWEEN '2018-04-21T06:37:44.512Z' AND '2018-04-21T08:37:44.512Z';

我的下一个猜测是,如果您试图找到所有 任何 时间戳落在特定范围内的警报文档,这将起作用:

SELECT a.*
FROM alerts a
WHERE 
   ANY x IN a.timestamps
   SATISFIES (x BETWEEN '2018-04-21T06:37:44.512Z' and '2018-04-21T08:37:44.512Z')
END;

希望这两个答案之一能满足您的需求。