我试图编写一个查询,只有当值"采取时才更新项目"属性不等于"是"。使用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) {
});
答案 0 :(得分:0)
我认为.
├── Auth.class
├── Auth.java
├── libs
├── Search$1.class
├── Search.class
├── Search.java
└── youtube.properties
1 directory, 6 files
存在问题。 ConditionExpression
是属性名称。它应该进入:p
。
ExpressionAttributeNames
答案 1 :(得分:0)
属性名称必须始终以#字符开头,而不是: (:用于属性值 NOT 属性名称。)您实际上正在比较条件中的2个字符串&#34; info.taken&#34;和&#34;是&#34;总是返回False!而不是&#39; info.taken&#39;属性值为&#34;是&#34;。
您应该将条件表达式更改为以下内容:
ConditionExpression: '#p <> :u',
,您的属性值为:
ExpressionAttributeValues:{
':r': 'yes',
':a': actualTime,
':u' : 'yes'
}
并添加:
ExpressionAttributeNames:{
'#p' : 'info.taken'}
来自AWS DynamoDB Doc:
在表达式中使用#字符取消引用属性名称。
以:字符开头的标记是表达式属性值,它们是运行时实际值的占位符。