2017-03-21 30 views
0
[{ 
    "forms": [{ 
     "id": "f1", 
     "title": "Form1", 
     "update_history": [{ 
      "version": "A", 
      "updated_at": "2016-12-10 12:12:10" 
     }, { 
      "version": "B", 
      "updated_at": "2017-01-01 05:17:19" 
     }, { 
      "version": "C", 
      "updated_at": "2017-02-07 03:22:39" 
     }] 
    },{ 
     "id": "f2", 
     "title": "Form2", 
     "update_history": [{ 
      "version": "B", 
      "updated_at": "2016-12-10 12:12:10" 
     }, { 
      "version": "C", 
      "updated_at": "2017-01-01 05:17:19" 
     }, { 
      "version": "D", 
      "updated_at": "2017-02-07 03:22:39" 
     }] 
    },{ 
     "id": "f3", 
     "title": "Form13", 
     "update_history": [{ 
      "version": "A", 
      "updated_at": "2016-12-10 12:12:10" 
     }, { 
      "version": "E", 
      "updated_at": "2017-01-01 05:17:19" 
     }, { 
      "version": "F", 
      "updated_at": "2017-02-07 03:22:39" 
     }] 
    }] 
}] 

我上面的數據存儲在Dynamo-DB表中。表單對象是父對象。 update_history嵌套對象中有3個列表數據。我想要所有具有版本A的列表數據。請建議我查詢相同的內容。如何在DynamoDB中使用FilterExpression爲嵌套的Json屬性應用SCAN查詢PHP中的查詢

回答

1

update_history是一個List數據類型,它包含Map對象。在DynamoDB數據模型上,這基本上是複雜結構

假設,version A將始終是列表中的第一個匹配項,下面的FilterExpression應該可以工作。如果這個假設不成立,FilterExpression將不起作用。

這是上述數據模型唯一可用的選項。如果您可以重新設計爲僅具有地圖或列表數據類型,那麼我們可以考慮備用解決方案。

下面的代碼是JavaScript的: -

你可以把它轉換成PHP代碼。 AWS SDK API概念在所有語言上都相同。

FilterExpression : 'update_history[0].version = :versionVal', 
    ExpressionAttributeValues : { 
     ':versionVal' : 'A' 
    }