我正在尝试对 dynamoose 模型执行更新。这是关于调用的文档model.update
Model.update(key[, updateObj[, settings]],[ callback])
key
可以是表示hashKey的字符串或包含hashKey和rangeKey的对象。
我的架构同时具有哈希键(分区键)和范围键(排序键),如下所示:
// create model
let model = dynamoose.model(
"SampleStatus",
{
id: {
type: String,
hashKey: true,
},
date: {
type: Date,
rangeKey: true,
},
status: String,
});
我创建了一个像这样的对象(带有固定的演示时间戳)
let timestamp = 1606781220842; // Date.Now()
model.create({
id: "1",
date: new Date(timestamp),
status: "pending",
});
我希望能够status
通过引用id
这样的属性来更新属性:
model.update({id: "1"}, {status: "completed"})
// err: The provided key element does not match the schema
model.update("1", {status: "completed"})
// err: Argument of type 'string' is not assignable to parameter of type 'ObjectType'
但两者都导致显示的错误:
如果我知道时间戳,我可以传入完整的复合键,因此以下将起作用:
let timestamp = 1606781220842; // Date.Now()
model.update({ id: "1", date: timestamp }, { status: "completed" });
但是,这需要我坚持时间戳并与 id 保持一致。
在我的例子中,ID 字段本身应该是唯一的,所以我不需要两者都创建一个键,但想将日期添加为范围键以便它是可排序的。我应该只更新我的架构,以便只有一个哈希键吗?我在想那些说“`key可以是代表hashkey的字符串”的文档会让我只传递ID,但这会在编译时引发错误(在打字稿中)。
有什么建议么?