cassandra 插入新记录时出现问题,请使用@ js/rest

woobm2wo  于 8个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(68)

我是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

mutmk8jj

mutmk8jj1#

您的代码失败,因为您没有指定ID。在Cassandra上不指定分区键就无法执行CRUD操作。
在Cassandra中,分区键用于对数据进行分区,这意味着分区键用于确定数据分区(记录)存储在哪个节点上。
在本例中,id是分区键。您必须指定id,否则Cassandra不知道数据属于哪个分区。
顺便说一下,没有必要使用像UUID这样的“人造”键。我们建议使用“自然”键,如电子邮件地址作为分区键,因为它们是普遍唯一的。类似地,如果userhandle在整个域中是唯一的,则可以使用它们作为分区键。
下面是一些使用自然键而不是人工ID进行分区的示例:

CREATE TABLE users_by_email (
    email text,
    name text,
    userhandle text,
    PRIMARY KEY (email)
)
CREATE TABLE users_by_handle (
    userhandle text,
    email text,
    name text,
    PRIMARY KEY (userhandle)
)

相关问题