Couchbase N1QL выбирает ключ для результатов запроса

#couchbase #n1ql

#couchbase #n1ql

Вопрос:

Я пытаюсь получить ключи документа для всех записей, которые имеют повторяющиеся значения для определенного поля.

У меня есть этот запрос, чтобы найти дубликаты:

 SELECT t1.somefield, t1.fieldcount FROM
(SELECT somefield, fieldcount FROM `mybucket` WHERE `somefield` IS NOT MISSING GROUP BY somefield
LETTING fieldcount = COUNT(somefield) ) as t1
WHERE t1.fieldcount > 1;
  

и нужно получить META().id для каждого результата.
Могу ли я сделать это в одном запросе?

Ответ №1:

ИСПОЛЬЗУЙТЕ ARRAY_AGG(META().id)

 SELECT d.somefield, cnt, docids
FROM mybucket AS d
WHERE d.somefield IS NOT NULL
GROUP BY d.somefield
LETTING cnt = COUNT(1), docids = ARRAY_AGG(META(d).id)
HAVING cnt > 1;
  

или

 SELECT d.somefield, ARRAY_LENGTH(docids) AS cnt, docids
FROM mybucket AS d
WHERE d.somefield IS NOT NULL
GROUP BY d.somefield
LETTING docids = ARRAY_AGG(META(d).id)
HAVING ARRAY_LENGTH(docids) > 1;
  

Комментарии:

1. Это сработало. У меня недостаточно баллов, чтобы отметить ответ как правильный.