微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用n1ql保存和读取文档后,Couchbase返回空值

如何解决使用n1ql保存和读取文档后,Couchbase返回空值

我使用repository.save()将文件插入couchbase中 然后,我查询以查找另一个文档上的重复项。

查询是:

SELECT ARRAY_AGG(i.serialnumber) serialNumbers
FROM default tempItem
UNnesT items i
WHERE tempItem.class = "com.inventory.model.item.TempItem"
    AND Meta(tempItem).id = '4390dd9e-e392-4432-939f-ebf046570086'
    and i.serialnumber in (select raw serialnumber from default where class = 'com.inventory.model.item.Item'
    AND status != 'DELETED' and serialnumber is not missing)

查询的结果是:

[
  {
    "serialNumbers": [
      "9121945901","9121955901","9211965901"
    ]
  }
]

保存的文档如下:

[
  {
    "tempItem": {
      "class": "com.inventory.model.item.TempItem","items": [
        {
          "categoryId": "67aaca7b-90b1-43e4-a6c6-0e9567bf283e","clientIds": [
            "919d0ca7-c8d4-4283-8b0a-b6f2a7b39753"
          ],"description": "bla bla","initial": 1,"productId": "db5c81c4-0fec-407e-8703-6f5fb69a070c","serialnumber": "9121945901","simType": "PREPAID","status": "ACTIVE","stock": 1,"title": "bla bla"
        }
      ]
    }
  }
]

一个要检查的文档是:

{
  "categoryId": "67aaca7b-90b1-43e4-a6c6-0e9567bf283e","class": "com.inventory.model.item.Item","clientIds": [
    "919d0ca7-c8d4-4283-8b0a-b6f2a7b39753"
  ],"createdts": 1601801989176,"creator": "919d0ca7-c8d4-4283-8b0a-b6f2a7b39753","prefix1": "912","prefix2": "194","title": "bla bla"
}

在春季启动时,当我在对文档进行seve后立即运行查询时,其返回空结果 并且如果我在保存后和运行查询返回值之前让毫秒睡眠

那是什么问题? 有人可以帮助解决这个问题吗?

解决方法

这可能是因为ScanConsistency。 Couchbase中的索引是asynchronously构建的。因此,如果您使用默认的“ NOT_BOUNDED”一致性,并在写入数据后立即使用N1QL 查询数据,则可能尚未对其进行索引。

我不知道如何在Spring中更改此设置,但是其他选择是:

  • REQUEST_PLUS-返回结果可能会花费更长的时间,但是查询引擎将确保它是最新的。
  • consistentWith(MutationState)又称AT_PLUS-为缩小扫描范围,根据索引更新率,这可能会提供更快的响应。

同样,不确定Spring,但不必全局设置。每个查询可以使用不同的扫描一致性。因此,如果您以最高的性能来评估最高的性能,则可以使用默认值。如果您以最高的精度来评估最高的精度,则可以使用REQUEST_PLUS或AT_PLUS。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。