C# 如何更新列表<;字符串>;在Cassandra中使用Mapper.UpdateAsync的列?
我是Cassandra的新手,我当前的项目要求我创建一个包含以下列的表:C# 如何更新列表<;字符串>;在Cassandra中使用Mapper.UpdateAsync的列?,c#,cassandra,nosql,C#,Cassandra,Nosql,我是Cassandra的新手,我当前的项目要求我创建一个包含以下列的表: id uuid PRIMARY KEY, connections list<text>, username text id uuid主键, 连接列表, 用户名文本 我正在使用Cassandra的IMapper接口来处理CRUD操作。我在这里找到了描述如何使用映射组件进行基本操作的文档: 我找不到概述如何使用Mapper组件从特定记录的列表列中添加和删除项的文档。我试图从数据库中检索记录,更新实体并保存对记
id uuid PRIMARY KEY,
connections list<text>,
username text
id uuid主键,
连接列表,
用户名文本
我正在使用Cassandra的IMapper接口来处理CRUD操作。我在这里找到了描述如何使用映射组件进行基本操作的文档:
我找不到概述如何使用Mapper组件从特定记录的列表列中添加和删除项的文档。我试图从数据库中检索记录,更新实体并保存对记录的更改,但数据库中没有更新记录。它在更新后保持不变。但是,insert操作起作用,它将实体向下镜像到列表中的对象
User user = await _mapper.SingleAsync<T>("where Name = " + name);
user.Addresses = user.Addresses.Concat(new string[] { address });
await _mapper.UpdateAsync<T>(user);
User User=wait\u mapper.SingleAsync(“where Name=“+Name”);
user.Addresses=user.Addresses.Concat(新字符串[]{address});
wait_mapper.UpdateAsync(用户);
在Cassandra中应该如何处理这种情况?您可以使用添加/前置或从列表中删除项目
在您的情况下,它将是:
// When using parameters, use query markers (?) instead of
// hardcoded stringified values
User user = await _mapper.SingleAsync<User>("where id = ?", id);
await _mapper.UpdateAsync<T>(
"SET connections = connections + ? WHERE id = ?", newConnections, id");
//使用参数时,请使用查询标记(?)而不是
//硬编码字符串化值
User User=wait_mapper.SingleAsync(“其中id=?”,id);
wait\u mapper.UpdateAsync(
“设置连接数=连接数+?其中id=?”,newConnections,id”);
请注意,追加和预结束操作本质上不是幂等的。因此,特别是,如果其中一个操作超时,则重试该操作是不安全的,并且可能(或可能不)导致将该值追加/预结束两次。我认为,要使其有效运行,您可能需要以下几点:
- 部分更新
- 使用ckloperator.Append/ckloperator.Prepend/ckloperator.SubstractAssign
这两种优化都可以通过
表
API获得,但不确定映射器
下面提供的答案@user1790300是如何得到的?