Amazon dynamodb 在dynamoDB PHP中,是否可以仅使用哈希键更新项?我不知道';没有范围键值

Amazon dynamodb 在dynamoDB PHP中,是否可以仅使用哈希键更新项?我不知道';没有范围键值,amazon-dynamodb,Amazon Dynamodb,记录1: [{ "business_id": 2, "user_id" = 5, "forms": { "f522": { "id": "f522", "is_deleted": 0, "title": "Form 1" }, "f8b6": { "id": "f8b6", "is_deleted": 0

记录1:

[{
    "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"
        }
    }
}]
记录2:

[{
    "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"
        }
    }
}]
记录3:

[{
    "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条记录存储在dynamo db表中。散列键是业务id,范围键是用户id。表单对象是父对象和子对象(id、是否删除、标题)。我不知道用户id值。但我只有business_id值“2”(这是唯一的,在其他记录business_id中不重复)。我希望将记录2的值更新为id的1(值为f6yy)。如果可能,请建议查询。

不,这是不可能的


但是,作为一种替代方法,您可以通过替换为新值来更新整个值。

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

第二:你提到

(这是唯一的。在其他记录业务_id中不重复)

如果用户标识和业务标识的映射使得没有两个用户可以具有相同的业务标识,那么您可以只使用业务标识作为主键,而不使用用户标识作为排序/范围键(因为具有范围键是可选的)。用户id字段仍然存在,但不再是范围键

如果不是这样,那么您可以再次只使用一个键[上面提到的主键(business_id)],并将用户id与表单对象一起存储。我在这里假设forms对象与用户id和业务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" } 
                    } 
                 ]
            }
]
}
更新操作现在变得非常重要

  • 因此,您首先必须获得条目
  • 通过迭代和修改自己更新它
  • 然后对新对象使用更新操作或简单的putItem

  • 作为此问题的一部分回答,这是的精确副本,我无法投票将此作为副本关闭,因为另一个问题尚未回答。我投票将此问题作为离题关闭,因为您在此处提出了精确副本。如果答案回答了您的问题,请在此处接受答案(注意:由于没有接受的答案,因此不能重复关闭)