簡體   English   中英

在文檔上使用 Contains 的 DynamoDB filterexpression

[英]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=1val contains DEFArn1的所有項目

為了實現這一目標,您有兩種選擇:

  1. 您將整個地圖作為條件傳遞,這意味着您必須知道DEFArnDEFName
    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',
        }
    )
  1. 你不知道完整的地圖,但你知道它應該在列表中的位置:
    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM