Couchbase N1qlQuery:删除导致查询服务出错

Couchbase N1qlQuery: delete cause error to the query service

我尝试运行这个查询

 delete from bucket o
 use keys (select raw ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t), s), u)
 from bucket
 use keys 'SS')

我收到这样的回复:

 {
    "status": "Unexpected server error"
 }

在服务器日志中我看到了这个:

 Service 'query' exited with status 1. Restarting. Messages: runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1 fp=0xc20e97cfc0 sp=0xc20e97cfb8
created by github.com/couchbase/query/parser/n1ql.NewLexerWithInit
/home/couchbase/jenkins/workspace/watson-unix/goproj/src/github.com/couchbase/query/parser/n1ql/n1ql.nn.go:30999 +0x4a6c9
[goport] 2016/11/29 08:40:11 /opt/couchbase/bin/cbq-engine terminated: signal: aborted (core dumped)

这个查询有什么问题?

我正在使用 couchbase 4.5 版。

USE KEYS 需要键数组。 ARRAY_CONCAT() returns 数组和子查询 returns 数组。它变成数组的数组。

删除其中一个数组如下。

从存储桶 o 中删除 使用键 (select raw ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t), s), u) 从桶里 使用键 'SS')[0];

如果 ARRAY_CONCAT() 参数缺失或为空,它可能会 return 在 4.5 中出现相同的恐慌错误。这已在 4.5.1 中修复。

您还可以使用 ARRAY_FLATTEN() 函数或 FIRST 运算符。

从存储桶中删除 o 使用密钥 ARRAY_FLATTEN( ( select 原始 ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT (d, t), s), u) 从 bucket 使用键 'SS'), 1) 返回 meta(o).id;

从存储桶 o 中删除 使用键 FIRST x FOR x IN ( select 原始 ARRAY_CONCAT(ARRAY_CONCAT(ARRAY_CONCAT(d, t),小号),你) 从桶里 使用键 'SS' ) 结尾 返回 meta(o).id;

请注意,当子查询用作表达式(例如,作为 ARRAY_FLATTEN() 的参数或在 FIRST 构造中)时,子查询周围需要括号(粗体斜体)