DynamoDB не поддерживает экзистенциальные условные проверки на уровне таблицы для неключевых атрибутов.
Чтобы распаковать этот оператор, вы не можете создать условие, при котором «Динамо» должно будет запрашивать у таблицы произвольные элементы, отличные от добавляемых вами, от вашего имени.
Вы должны реализовать логику, чтобы самостоятельно проверить существование, и, к сожалению, сделать это атомарно будет нелегко.
Вы, очевидно, можете сделать наивную проверку, когда ваш рабочий процесс выглядит примерно так:
1) запрос GSI, который вы создали на PhoneId, чтобы убедиться, что он возвращает пустой результат для PhoneId, который вы пытаетесь добавить
2) добавить элемент, только если результат пуст
Но вышеприведенное восприимчиво к условиям гонки, когда другая операция может изменить таблицу между № 1 и № 2 выше, поэтому вам придется проявить творческий подход: например, вы можете сделать что-то вроде этого:
1) всегда вставлять элемент, но хранить атрибут, который записывает время, когда вы сделали вставку
2) выполнить запрос после вставки на PhoneId и отметить все старые элементы для удаления
3) удалить устаревшие записи
Решение все еще далеко от идеала, потому что оно требует от вас защиты кода для защиты от возможных временных дубликатов.