Couchbase标识数据库中是否已存在文档

时间:2019-09-11 17:17:59

标签: java couchbase spring-data-couchbase

我正在执行下一个查询,以确定数据库中是否存在文档。如果存在,我可以返回true,但是如果文档在数据库中尚不存在。

下一个问题:

Unable to execute query due to the following n1ql errors: 
{"msg":"No index available on keyspace kids_club that matches your query. Use CREATE INDEX or CREATE PRIMARY INDEX to create an index, or check that your expected index is online.","code":4000}

这是我的代码,我不想获取其他字段而不是id,因为我只想标识文档是否存在:

/**
     * Get the ShipRoom document if exists.
     * @return Optional-ShipRoom if exist, Optional.empty() otherwise.
     */
    @Query("SELECT META(sp).id AS _ID, META(sp).cas AS _CAS"
            + " FROM #{#n1ql.bucket} as sp"
            + " WHERE #{#n1ql.filter}")
    Optional<ShipRoom> findShipRoomDocument();

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

该错误消息表示您没有该查询可以使用的索引。尝试在查询工作台中运行该查询,您将得到相同的错误。您需要CREATE INDEX(我不知道您的WHERE语句是什么样的,所以我不推荐您使用索引)。

但是,如果您有文档ID,则无需使用N1QL查询来查看它是否存在。您可以调用Exists() method on the Couchbase Java SDK,它会更快地工作,因为它不会产生查询/索引服务的开销。