Сканирование и фильтрация вложенных атрибутов карты в DynamoDB с помощью Java SDK

У меня есть документ JSON, хранящийся в атрибуте с именем doc, который выглядит примерно так:

{
    doc:  
        {
            "foo": 
                {
                     "bar": "baz"
                }
         }
}

Я хотел бы иметь возможность выполнять сканирование таблицы и фильтрацию / поиск по data.foo.bar == "baz". Я использую Java SDK и пробовал следующий код, но он не работает для дополнительной карты документа:

String filterExpression = "#d.#f.#b = :val";
Map<String, String> nameMap = new HashMap();
nameMap.put("#d", "doc");
nameMap.put("#f", "foo");
nameMap.put("#b", "bar");
Map valueMap = new HashMap();
valueMap.put(":val", "baz");
ItemCollection<ScanOutcome> items = table.scan(
    new ScanSpec()
        .withFilterExpression(filterExpression)
        .withNameMap(nameMap)
        .withValueMap(valueMap));

РЕДАКТИРОВАТЬ - Я обнаружил, что это работает:

String filterExpression = "#d.foo.bar = :val";

Где у меня только один ExpressionAttributeNames для первого атрибута, он работает. Любые мысли, почему это не работает с 3 ExpressionAttributeNames? Что, если по какой-то причине мне понадобились 3, то есть это были зарезервированные слова?

Любая помощь или предложения с благодарностью. Благодарю.

0 ответов

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