【发布时间】:2021-11-22 22:53:29
【问题描述】:
我正在尝试针对 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",
});
我希望能够通过像这样引用 id 属性来更新 status 属性:
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 可以是表示哈希键的字符串" 的文档会让我只传递 ID,但这会在编译时引发错误(在 typescript 中)。
有什么建议吗?
【问题讨论】:
-
为什么需要 date 作为 rangeKey?
-
嘿查理,我可能可以删除它。它可能只是从其他地方复制的意大利面。没有强大的用例。
-
如果您有时间,请帮我一个忙,在 Dynamoose GitHub 存储库上创建一个问题以改进有关此问题的错误消息。提供您的示例代码,甚至提供此 SO 帖子的链接。想要在这里获得更详细的更好的错误消息。