【问题标题】:Couchbase: How to delete item from list based on child value?Couchbase:如何根据子值从列表中删除项目?
【发布时间】:2019-02-12 20:23:16
【问题描述】:

沙发底座 2.5+

这里是沙发基地的新手。我正在寻找从列表中删除一个项目,其中一个子项目基于子项目的值。例如,如果我想删除列表scores 中的所有记录,其中子score < 0.2

此项目的密钥为"dim::100020891::2020-10-04"

我想运行它,但它不起作用

UPDATE Q1036628 USE KEYS "dim::100020891::2020-10-04" SET scores=ARRAY_REMOVE(scores, {
      "score"< "0.2"
    })

沙发底座项目:

   [
          {
            "Q1036628": {
              "record_update_dt": "2020-10-04",
              "scores": [
                {
                  "name": "A",
                  "score": 0.01
                },
                {
                  "name": "B",
                  "score": 0.5
                },
                {
                  "name": "C",
                  "score": 0.26
                },
                {
                  "name": "D",
                  "score": 0.17
                }
              ],
              "id": "100020891"
            }
          }
        ]

【问题讨论】:

  • 有点困惑:你说“Couchbase 2.5”,但你引用的是 N1QL,它直到 4.x 才出现在 Couchbase 中。您使用的是哪个版本的 Couchbase 服务器?
  • 另外,你的“Couchbase item”看起来是一个数组。它真的是一个带有数组的文档(不常见但可能),还是有一个 Q1036628 存储桶包含一个带有键“100020891”的文档?
  • 好问题。我在 Couchbase 版本上犯了一个错误。我们使用的是 couchbase 5.5。 Q1036628 是一个桶,上面有一个项目。每个 id 都会有几个属性,我们正在讨论创建它的最佳模型(将属性全部放在一个列表中,或者将每个属性放在自己的文档中)。现在所有属性都在一个文档中,稍后将单独更新。不过,我们并没有接受这个想法。

标签: nosql couchbase


【解决方案1】:

您应该使用 ARRAY 子句。

UPDATE Q1036628 USE KEYS "dim::100020891::2020-10-04" 
SET scores = ARRAY s FOR s IN scores WHEN s.score >= 0.2 END

https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/collectionops.html#array

您可能需要稍微尝试一下语法;我手边没有实例。

【讨论】:

    【解决方案2】:

    只需在 Johan Larson 解决方案中再添加一项即可。

    WHERE 子句控制要改变的文档。 SET 子句控制要更新的内容。您在 SET 子句中有条件。如果分数数组中没有对象,分数​​

    UPDATE Q1036628 AS d USE KEYS "dim::100020891::2020-10-04" 
    SET d.scores = ARRAY s FOR s IN d.scores WHEN s.score >= 0.2 END
    WHERE ANY s IN d.scores SATISFIES s.score < 0.2 END;
    

    【讨论】:

      猜你喜欢
      • 2022-11-19
      • 2011-03-17
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多