[英]DynamoDB update item in case of item's value
我試圖寫一個查詢,僅當值“ taken”屬性不等於“ yes”時才更新項目。 使用dynamoDB可以做到這一點嗎? 現在,dynamoDB不會檢查條件。 它會更新我的商品,並且不會檢查“拍攝”是否不等於“是”
var params = {
TableName:"usersRinger1",
Key:{
"userID": self.event.session.user.userId,
"medicine": User.USERNAME.current.lastDrug
},
ConditionExpression: ':p <> :u',
UpdateExpression: "set info.taken = :r, info.whatTime=:a",
ExpressionAttributeValues:{
":r": "yes",
":a": actualTime,
':p' : 'info.taken',
':u' : "yes"
},
ReturnValues:"UPDATED_NEW"
};
docClient.update(params, function(err, data) {
});
我認為ConditionExpression
存在問題。 :p
是屬性名稱。 它應該放入ExpressionAttributeNames
。
ExpressionAttributeNames : {
":p" : "info.taken"
},
屬性名稱必須始終以#字符開頭,而不是:( :用於屬性值,而不是屬性名稱。)實際上,您正在比較條件“ info.taken”和“ yes”中的兩個字符串,它們始終返回False! 而不是'info.taken'屬性的值設置為“ yes”。
您應該將條件表達式更改為以下內容:
ConditionExpression: '#p <> :u',
並且您的屬性值包括:
ExpressionAttributeValues:{
':r': 'yes',
':a': actualTime,
':u' : 'yes'
}
並添加:
ExpressionAttributeNames:{
'#p' : 'info.taken'}
從AWS DynamoDB Doc:
在表達式中使用#字符可取消引用屬性名稱。
以:字符開頭的標記是表達式屬性值,它們是運行時實際值的占位符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.