【问题标题】:How can I get last inserted Counter_id from Couchbase bucket?如何从 Couchbase 存储桶中获取最后插入的 Counter_id?
【发布时间】:2018-07-06 08:13:49
【问题描述】:

如何从 Couchbase 存储桶中获取最后插入的 Counter_id ?这样我就可以从最后插入的 id + 1 中增加一个值。我使用的是 Couchbase java-client 2.5.5。

【问题讨论】:

  • 我不知道couchbase,但我认为有自动增量或等价物。

标签: java couchbase n1ql


【解决方案1】:

要选择存储在测试桶中的文档中字段 counter_id 的当前最高值,您可以运行此 N1QL 查询。

SELECT MAX(counter_id) FROM test

然后将值加 1。

问题在于,如果由于查询交错而存在任何实际并发,那么这样做将无法正常工作。在这种情况下,如果您只需要唯一值,我建议您使用 UUID,它很有可能是唯一的。我相信 Java 有某种用于生成 UUID 的库;它拥有其他一切。

如果您想从 N1QL 内部生成 UUID(),您也可以使用 UUID() 函数来执行此操作。

https://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/metafun.html

或者,您可以使用抗辩文件,如下所述: https://blog.couchbase.com/using-autonumber-in-couchbase/

【讨论】:

  • 我在执行上述查询时得到空值。 [ { "$1": null } ]
  • 如果没有带有 counter_id 字段的文档,则聚合结果为空。
  • Counter_id 不是一个字段,我使用 counter 来增加 couchbase 中 DocumentId 的自动编号。参考这里blog.couchbase.com/using-autonumber-in-couchbase
  • 好的,所以你有一个 id 为 "counter_id" 的文档和一个数字值。该值不会包含在聚合查询中;聚合查询正在查看名为“counter_id”的字段中的值,这与名为“counter_id”的文档不同。不同的概念。如果要使用 N1QL 检索 counter_id 文档的值,可以使用此查询:select * from test use keys "counter_id"
  • select * from test 在我的例子中使用键“自动”。但我在使用计数器创建文档时尝试使用 counter_id,收到以下错误。“异常:com.couchbase.client.java.error.TranscodingException:无法解码 ID 为 counter_id 的文档”
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多