2017-03-24 43 views
-1

记录1:可以在dynamoDB PHP中仅使用散列键更新项目?我没有范围键值

[{ 
    "business_id": 2, 
    "user_id" = 5, 
    "forms": { 
     "f522": { 
      "id": "f522", 
      "is_deleted": 0, 
      "title": "Form 1" 
     }, 
     "f8b6": { 
      "id": "f8b6", 
      "is_deleted": 0, 
      "title": "Form 2" 
     }, 
     "fw56": { 
      "id": "fw56", 
      "is_deleted": 0, 
      "title": "Form 3" 
     } 
    } 
}] 

RECORD2:

[{ 
    "business_id": 3, 
    "user_id" = 1, 
    "forms": { 
     "f788": { 
      "id": "f788", 
      "is_deleted": 0, 
      "title": "Form 11" 
     }, 
     "f6yy": { 
      "id": "f6yy", 
      "is_deleted": 0, 
      "title": "Form 12" 
     }, 
     "f00i": { 
      "id": "f00i", 
      "is_deleted": 0, 
      "title": "Form 13" 
     } 
    } 
}] 

RECORD3:

[{ 
    "business_id": 4, 
    "user_id" = 3, 
    "forms": { 
     "f839": { 
      "id": "f839", 
      "is_deleted": 0, 
      "title": "Form 21" 
     }, 
     "f1bc": { 
      "id": "f1bc", 
      "is_deleted": 0, 
      "title": "Form 22" 
     }, 
     "f6ac": { 
      "id": "f6ac", 
      "is_deleted": 0, 
      "title": "Form 23" 
     } 
    } 
}] 

我有3条记录存储在发电机-db表。哈希键是business_id,范围键是user_id。表单对象是具有子对象(id,is_deleted,title)的父对象。我不知道user_id的值。但我只有business_id值“2”(这是唯一的,不会在其他记录business_id中重复)。我想更新记录2 is_deleted值为1的id(值是f6yy)。如果可能,请建议查询。

+0

作为此问题的一部分回答http://stackoverflow.com/questions/42992783/it-is-possible-to-update-item-without-hash-key-or-range-key-value-in -dynamodb-ph – notionquest

+0

这是https://stackoverflow.com/questions/42992783/it-is-possible-to-update-item-without-hash-key-or-range-key-value-in的确切副本-dynamodb-ph,我无法投票将其作为重复关闭,因为另一个尚未得到答复。 – mkobit

+0

我投票结束这个问题作为题外话,因为你在这里问了一个确切的重复http://stackoverflow.com/questions/42992783/it-is-possible-to-update-item-without-hash-key -or-范围-键 - 值在-dynamodb-PH。如果回答您的问题,请接受答案(注意:由于它没有被接受的答案,因此不能重复关闭) – tddmonkey

回答

0

不,这是不可能的。

但是作为替代路线,您可以通过替换新值来更新整个值。

0

首先,AWS sdk for dynamodb需要更新操作的两个键值,因此两个键都是必需的,因为只能使用两个键才能识别条目。

其次:你刚才提到

如果USER_ID和business_id的映射是这样的:没有2个用户可以有相同的business_id(这是唯一在其他记录business_id不再重复。)那么你可以使用business_id作为主键,而不是使用user_id作为排序/范围键(因为有​​一个范围键是可选的)。 user_id字段将仍然存在,但不再是范围键。

如果不是这种情况,你可以做的只是再次使用一个键[上面提到的主键(business_id)]并存储user_id以及表单对象。我在这里假设表单对象与具有business_id的user_id相关。

新的架构将是这个样子

{ "Record1": [ 
      { 
       "business_id": 2, 
       "forms": 
       [ 
        { 
        "user_id" : 5, 
        "f522": { "id": "f522", "is_deleted": 0, "title": "Form 1" }, 
        "f8b6": { "id": "f8b6", "is_deleted": 0, "title": "Form 2" }, 
        "fw56": { "id": "fw56", "is_deleted": 0, "title": "Form 3" } 
        } 
       ] 
      } 
] 
} 

的更新操作,现在变成不平凡的,

  1. ,所以你必须首先得到的条目。
  2. 通过迭代和更改自己更新它。
  3. 然后使用更新操作或简单的putItem与新对象。
相关问题