[英]DynamoDB filterexpression using Contains on a document
我正在為 AWS dynamoDB 使用 Java AWS SDK。 是否可以在文檔對象上使用“包含”功能? Contains 正在研究一個簡單的領域。 但如果該字段是@DynamoDBDocument,則它不起作用。 如果您知道在文檔中搜索值的方法,請告訴我。 我的查詢如下所示:
DynamoDBQueryExpression<SSRequest> query = new DynamoDBQueryExpression<SSRequest>()
.withHashKeyValues(ssRequest)
.withIndexName("ssRequestType-index")
.withFilterExpression(" contains(attachments, :val) ")
.withExpressionAttributeValues(eav)
.withConsistentRead(false);
在上面的查詢中,附件是一個文檔。 我也嘗試過掃描。 但掃描和查詢都不適用於文檔字段。
你沒有分享你的數據結構,但我會試着總結一下:
{
"id": "1",
"val": {
"ABCLink": [
{
"DEFName": "MyDefName1",
"DEFArn": "DEFArn1"
},
{
"DEFName": "MyDefName2",
"DEFArn": "DEFArn2"
}
],
"ABCArn": "ProfileArn1"
}
}
現在假設您想要id=1
且val contains DEFArn1
的所有項目
為了實現這一目標,您有兩種選擇:
DEFArn
和DEFName
response = client.scan(
TableName=table_name,
FilterExpression='contains(#a.#b, :r)',
ExpressionAttributeValues={
':r': {
"M": {
"DEFName": {
"S": "MyDefName1"
},
"DEFArn": {
"S": "DEFArn1"
}
}
}
},
ExpressionAttributeNames={
'#a': 'val',
'#b': 'ABCLink',
}
)
response = client.scan(
TableName=table_name,
FilterExpression='contains(#a.#b[0].DEFArn, :r)',
ExpressionAttributeValues={
':r': {
"S": "DEFArn1"
}
},
ExpressionAttributeNames={
'#a': 'val',
'#b': 'ABCLink',
}
)
注意:我重用了之前分享的一個例子,代碼是Boto3,但是邏輯是一樣的。 我希望它對您的用例有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.