我有一个超级简单的 Couchbase-Spring-Data 项目,连接到 Couchbase 6.6 实例,基于 bealdung
的演练该项目按预期工作,我能够通过 Couchbase 的 ID 创建和读取文档。 然而,当我进入 couchbase UI 并运行一个简单的查询时;
select *, meta().id from `bucket` where meta().id = 'id:13'
(无论如何,这就是 ID 现在的样子)。
用户界面告诉我
No index available on keyspace bucket that matches your query.
这是真的,meta().id 上没有主索引或专用索引。
那么 Couchbase-spring-data 是如何找到对象的?
我仍在继续研究文档。但到目前为止我还没有找到任何可以解决问题的方法。
在大多数情况下,SQL++ 查询需要索引才能运行,因此您有理由质疑发生了什么。
但是,并非“每个”查询都需要索引。例如,如果我知道密钥,我可以在 SQL++ 查询中使用 USE KEYS
语法:
SELECT m.*, meta().id
FROM `travel-sample`.myscope.mycollection m
USE KEYS 'doc1'
注意谓词是
USE KEYS 'doc1'
而不是
WHERE META().id = 'doc1'
。我不能确定 Spring 是如何做到这一点的,它可能会使用 key/value API而不是 SQL++(如果您已经知道键,这是查找数据的更有效方法)。