我的文档如下所示:
{ "data": { "eventId": "20161029125458-df-d", "name": "first", "purpose": "test", "location": "yokohama", "dateArray": [], "attendees": [ { "attendeeId": "2016102973634-df", "attendeeName": "lakshman", "personalizedDateSelection": {} }, { "attendeeId": "2016102973634-tyyu", "attendeeName": "diwaakar", "personalizedDateSelection": {} } ] } }
说,我需要使用 与会者ID:2016102973634-df 更新与会者JSON数组。我尝试了使用 更新和条件表达式的 多种方法,但均未成功。
这是我的尝试:
const params = { TableName: "event", Key: { "eventId": eventId }, UpdateExpression: "SET attendees[???] = ", ConditionExpression: attendees.attendeeId = "2016102973634-df", ExpressionAttributeValues: { ":attendee" : attendeeList }, ReturnValues: "ALL_NEW" }; dynamo.update(params, (err, data) => { if (err) { return reject(err); } console.log(data.Attributes); });
找不到用于更新数组中的Json的任何资源。
@notionquest发表评论后:-尚未使用任何JsonMarshaller。最初,我将空数组添加到与会者字段,如下所示:
{ "eventId": "20161029125458-df-d", "name": "first", "purpose": "test", "location": "yokohama", "dateArray": [], "attendees": [] }
然后,当新的 与会者 到来时,将其添加到 与会者 属性中,如下所示:
const attendee = { "attendeeName": "user1", "personalizedDateSelection": {"today": "free"} } const attendeeList = [attendee]; const eventId = "20161029125458-df-d"; const params = { TableName: "event", Key: { "eventId": eventId }, UpdateExpression: "SET attendees = list_append(attendees, :attendee)", ExpressionAttributeValues: { ":attendee" : attendeeList }, ReturnValues: "ALL_NEW" }; dynamo.update(params, (err, data) => { if (err) { return reject(err); } console.log("in update dynamo"); console.log(data.Attributes); });
如您在上面的代码片段中所见,最初,我 使用上述代码 添加了空 []数组 并添加了 新的参与者 。现在,如何更新数组中的特定JSON。如果您说不可能,那么我还能尝试什么?
我应该试试这个吗?
想知道是否有任何通行的途径?
我找不到查询和更新JSON数组的答案。我认为,不允许使用这些功能可能是AWS的获利动机。如果您需要查询除主键以外的特定ID,则需要创建一个具有成本效益的二级索引。该二级索引成本是dyn amoDB表成本的额外费用。
因为我不想在二级索引上花额外的钱,所以我将dynamoDB模式更改为以下内容:
{ "data": { "eventId": "20161029125458-df-d", "name": "first", "purpose": "test", "location": "yokohama", "dateArray": [], "attendees": { "2016102973634-df": { "attendeeId": "2016102973634-df", "attendeeName": "lakshman", "personalizedDateSelection": {} }, "2016102973777-df": { "attendeeId": "2016102973777-df", "attendeeName": "ffff", "personalizedDateSelection": {} } } } }
将参加者从 [] 更改为 {} 。这使我可以灵活地查询特定的 与会者ID 并更改与此关联的整个JSON。即使这是多余的步骤,我也不想在业余爱好项目上花费额外的钱。