Использование функций Couchbase String в ответе N1QL

Я хочу получить и манипулировать некоторыми документами Couchbase, то есть получить и выполнить некоторые манипуляции со строками, но я не вижу в Интернете примера для начинающих.

Я использую правильный подход здесь или есть более простой способ...?

SELECT  meta().id    
FROM bucket_foo 
where meta().id like  "%-foobar"  
ORDER BY meta().id

Это дает мне результат запроса...

[
  {
    "id": "172.26.138.52-foobar"
  },
  {
    "id": "172.26.138.53-foobar"
  },
  {
    "id": "172.26.138.64-foobar"
  }
]

Я хочу удалить суффикс, т.е. преобразовать его в нечто вроде:

 [
      {
        "id": "172.26.138.52"
      },
      {
        "id": "172.26.138.53"
      },
      {
        "id": "172.26.138.64"
      }
    ]

поэтому после прочтения https://developer.couchbase.com/documentation/server/4.0/n1ql/n1ql-language-reference/stringfun.html я попытался...

SELECT  REPLACE(
  (SELECT meta().id  FROM foo where meta().id like  "%-foobar"  ORDER BY meta().id)
, "-foobar", "") as replace_all;

но я получаю

[
  {
    "replace_all": null
  }
]

[Я полный новичок Couchbase.]

1 ответ

Решение

Вы находитесь в правильном подходе, подзапрос возвращает массив, и вы не можете заменить массив. В этом случае подзапрос не требуется.

Вы можете использовать RTRIM() или REPLACE() или SUBSTR() или аналогичные функции

SELECT RTRIM(meta().id,"-foobar") AS id
FROM bucket_foo
where meta().id like  "%-foobar"
ORDER BY id;

ИЛИ ЖЕ

SELECT REPLACE(meta().id,"-foobar","") AS id
FROM bucket_foo
where meta().id like  "%-foobar"
ORDER BY id;

ИЛИ ЖЕ

SELECT SUBSTR(meta().id,0,LENGTH(meta().id)-LENGTH("-foobar")) AS id
FROM bucket_foo
where meta().id like  "%-foobar"
ORDER BY id;

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

Другие вопросы по тегам