我是astra db的新手,在使用@ mjs/rest时,尝试将一条记录插入名为“usersnew”的表时遇到了问题
这是我的表的结构:
CREATE TABLE mykeyspace.usersnew (
id uuid PRIMARY KEY,
email text,
name text,
userhandle text
)
1/如果我创建一个用户并创建/填充ID字段(uuid),它工作得很好!
// create a new user with a document id -- seems to work!
const { data, status } = await astraClient.put(
"/api/rest/v2/keyspaces/mykeyspace/usersnew/ddd795a9-a9a2-49ca-a6a7-a29e1b039e20",
{
email: "abc@abc",
name: "cliff",
userhandle: "handlethis"
}
);
2/如果我尝试在不指定ID字段的情况下创建一个用户,它会失败
// creating a user without passing in a ID field
const { data, status } = await astraClient.post(
"/api/rest/v2/keyspaces/mykeyspace/usersnew",
{
email: "aaa@aaa",
name: "aaaa",
userhandle: "handlethat"
}
);
这就是我得到的错误:
Astra Client Error: Error: Request Failed: [object Object]
Stack Trace: Request failed with status code 404
如果有人能好心地帮助我,我将不胜感激。我一整天都在试着解决这个问题,但一点运气都没有。
我也一直在遵循datastax文档,但遗憾的是,它经常是错误的/不一致的。
https://docs.datastax.com/en/astra-serverless/docs/develop/dev-with-rest.html
1条答案
按热度按时间mutmk8jj1#
您的代码失败,因为您没有指定ID。在Cassandra上不指定分区键就无法执行CRUD操作。
在Cassandra中,分区键用于对数据进行分区,这意味着分区键用于确定数据分区(记录)存储在哪个节点上。
在本例中,
id
是分区键。您必须指定id
,否则Cassandra不知道数据属于哪个分区。顺便说一下,没有必要使用像UUID这样的“人造”键。我们建议使用“自然”键,如电子邮件地址作为分区键,因为它们是普遍唯一的。类似地,如果
userhandle
在整个域中是唯一的,则可以使用它们作为分区键。下面是一些使用自然键而不是人工ID进行分区的示例: