当仅使用 IN 运算符时,以下查询可以正常工作
SELECT META().id FROM bucket_name WHERE description IN ['Item1','Item2']
但是当我触发这个查询时,它给了我一个空白的结果
SELECT META().id FROM bucket_name WHERE id = 123 AND description IN ['Item1','Item2']
我做错了什么还是其他人面临同样的问题?
我认为您必须将“IN”条件放入括号中才能使其起作用:
SELECT META().id FROM bucket_name WHERE id = 123 AND (description IN ['Item1','Item2'])
这与N1QL处理器对算子评估的优先级有关
如果您使用EXPLAIN关键字运行它,它将显示它如何将条件相互关联。
例如
explain SELECT META().id FROM bucket_name WHERE id = 123 AND (description IN ['Item1','Item2'])
对比
explain SELECT META().id FROM bucket_name WHERE id = 123 AND description IN ['Item1','Item2']
使用最新的 N1QL 开发人员预览版 ( http://docs.couchbase.com/developer/n1ql-dp3/n1ql-intro.html ) IN 子句不需要括起来,所以这应该可以工作:
SELECT META(b).id FROM bucket_name b WHERE id = 123 AND description IN ['Item1','Item2']
您需要将存储桶名称(或别名)传递给 META() 我认为因为 N1QL 现在支持对多个存储桶的查询。