Во-первых, нет данных типа JSON в DynamoDB. Если вы имеете в виду, что данные хранятся в виде данных типа DynamoDB MAP
, то нижеприведенное решение должно работать на вас.
Короче говоря, выражение фильтра должно быть что-то, как показано ниже: -
FilterExpression : 'records.K1 = :recordsK1Value and records.K2 = :recordsK2Value'
Если вам нужно иметь только «records.K1» и «records.K2» на выходе, вы можете использовать выражение для проекта что.
ProjectionExpression : 'records.K1, records.K2'
Полный код: -
public List<String> queryMoviesAndFilterByMapAttribute() {
List<String> moviesJsonList = new ArrayList<>();
DynamoDB dynamoDB = new DynamoDB(dynamoDBClient);
Table table = dynamoDB.getTable("Movies");
QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("yearkey = :yearval and title = :titleval")
//.withProjectionExpression("records.K1, records.K2")
.withFilterExpression("records.K1 = :recordsK1Value and records.K2 = :recordsK2Value").withValueMap(
new ValueMap().withNumber(":yearval", 1991).withString(":titleval", "Movie with map attribute")
.withString(":recordsK1Value", "V1").withString(":recordsK2Value", "V2"));
IteratorSupport<Item, QueryOutcome> iterator = table.query(querySpec).iterator();
while (iterator.hasNext()) {
Item movieItem = iterator.next();
System.out.println("Movie data ====================>" + movieItem.toJSONPretty());
moviesJsonList.add(movieItem.toJSON());
}
return moviesJsonList;
}
Пример вывода всех полей (т.е. без выражения проекта): -
Movie data ====================>{
"yearkey" : 1991,
"records" : {
"K1" : "V1",
"K2" : "V2",
"K3" : "V3",
"K4" : "V4"
},
"title" : "Movie with map attribute"
}
Пример вывода после того, как не-Комментирование выражение проекта: -
Обратите внимание, что другие поля, такие как yearkey, title, K3 и K4, отсутствуют на выходе.
Movie data ====================>{
"records" : {
"K1" : "V1",
"K2" : "V2"
}
}
Каков тип данных DynamoDB атрибутов «записи»? Это карта? – notionquest
Я думал о двух типах: один как строка json после сериализации его с чем-то вроде gson. Второй вариант - сериализовать его, но сохранить его как список, а не одну строку. – chrisrhyno2003