首先,DynamoDB中沒有JSON數據類型。如果您的意思是數據存儲爲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"
}
}
什麼是「records」屬性的DynamoDB數據類型?它是地圖嗎? – notionquest
我想到了兩種類型 - 一種是像gson之類的序列化後的json字符串。第二種選擇是將其序列化,但將其存儲爲列表而不是單個字符串。 – chrisrhyno2003