Mr Lou
Mr Lou

Reputation: 1807

aws dynamodb query attribute value that contains special character?

attribute itemJson stored as follow

 "itemJson": {
    "S": "{\"sold\":\"3\",\"listingTime\":\"20210107211621\",\"listCountry\":\"US\",\"sellerCountry\":\"US\",\"currentPrice\":\"44.86\",\"updateTime\":\"20210302092220\",\"itemLocation\":\"Miami,FL,USA\",\"listType\":\"FixedPrice\",\"categoryName\":\"Machines\",\"itemID\":\"293945109477\",\"sellerID\":\"holiday_for_you\",\"s3Key\":\"US/2021/2/FixedPrice/293945109477.json\",\"visitCount\":\"171\",\"createTime\":\"20210201233158\",\"listingStatus\":\"Completed\",\"endTime\":\"2021-02-28T20:22:57\",\"currencyID\":\"USD\"}"
  },

i want to query with filter:contains(itemJson, "sold":"0") with java sdk,i tried those syntax,all fail

expressionValues.put(":v2", AttributeValue.builder().s("\\\"sold\\\":\\\"0\\\"").build());
expressionValues.put(":v2", AttributeValue.builder().s("sold:0"").build());

what is the right way to my filter syntax?

I try @Balu Vyamajala's syntax on the dynamodb web console as follow,did not get the solution yet enter image description here

Upvotes: 1

Views: 1685

Answers (1)

Balu Vyamajala
Balu Vyamajala

Reputation: 10333

contains (itemJson, :subValue) with value of "sold\":\"3\"" seems to be working.

Working example on a Query Api and worked as expected:

QuerySpec querySpec = new QuerySpec()
.withKeyConditionExpression("pk = :v_pk")               
.withFilterExpression("contains (itemJson, :subValue)")
.withValueMap(new ValueMap().withString(":v_pk", "6").withString(":subValue", "sold\":\"3\""));

and to test from Aws console we just need to enter "sold":"2" enter image description here

Upvotes: 1

Related Questions