Как удалить документы без вложенных документов в couchbase? - PullRequest
3 голосов
/ 28 февраля 2020

У меня есть документ couchbase с идентификатором x

x, у которого нет поддокумента, так как все были удалены в какой-то операции subdo c, это что-то вроде {}

Я хочу удалить все такие пустые документы без поддок. Это возможно в couchbase, используя запрос N1QL или иным образом? Я попробовал поискать решения, но не нашел соответствующих решений.

Спасибо, что нашли время, чтобы прочитать вопрос до конца.

1 Ответ

4 голосов
/ 28 февраля 2020

Для следующего запроса требуется первичный индекс.

DELETE FROM default AS d
WHERE d = {};

В следующем запросе в качестве покрываемого индекса используется ix10. Индекс содержит только пустые объекты.

CREATE INDEX ix10 ON default(OBJECT_LENGTH(self))
WHERE OBJECT_LENGTH(self) = 0;

DELETE FROM default AS d
WHERE OBJECT_LENGTH(d) = 0;

Вы можете проверить с помощью следующих данных. Выбор должен давать только "k003"

INSERT INTO default VALUES ("k001",1), VALUES ("k002",{"a":1}),  VALUES ("k003",{});

SELECT META(d).id
FROM default AS d
WHERE OBJECT_LENGTH(d) = 0;
...