arangodb - 如何正确更新具有唯一索引字段的 ArangoDB 文档?
问题描述
我有以下用户表架构:
name: string
emails: [string] // unique index
索引按以下方式创建(go
语言):
usersCollection.EnsureHashIndex(
ctx,
[]string{"emails[*]"},
driver.EnsureHashIndexOptions{Unique: true, Sparse: true})
假设我在数据库中有以下用户:
{_key: "1", name: "A", emails: ["aa@aa.aa"]}
使用以下命令添加电子邮件会arangosh
返回错误:
> db.users.update("1", {emails: ["aa@aa.aa", "aa2@aa.aa"]})
JavaScript exception in file '/usr/share/arangodb3/js/client/modules/@arangodb/arangosh.js' at 99,7: ArangoError 1210: unique constraint violated - in index 442818 of type rocksdb-hash over ["emails[*]"]; conflicting key: 1
使用replace
返回类似的错误。
如何正确向给定用户添加电子邮件?
解决方案
我正在用arangosh 演示这一点。创建集合:
db._create('usersCollection')
[ArangoCollection 497, "usersCollection" (type document, status loaded)]
将唯一索引添加到集合中:
db.usersCollection.ensureIndex({ type: "hash", fields: [ "emails[*]" ], unique: true, sparse: true })
{
"deduplicate" : true,
"fields" : [
"emails[*]"
],
"id" : "usersCollection/517",
"isNewlyCreated" : true,
"selectivityEstimate" : 1,
"sparse" : true,
"type" : "hash",
"unique" : true,
"code" : 201
}
像您一样创建条目:
db.usersCollection.save({_key: "1", name: "A", emails: ["aa@aa.aa"]})
{
"_id" : "usersCollection/1",
"_key" : "1",
"_rev" : "_YSk15je---"
}
现在我们使用 AQL 更新 emails 字段以添加其他电子邮件:
db._query(`UPDATE '1' WITH {emails: ["aa@aa.aa", "bb@bb.bb"]} IN usersCollection`)
[object ArangoQueryCursor, count: 0, cached: false, hasMore: false]
检查回复:
db.usersCollection.toArray()
[
{
"_key" : "1",
"_id" : "usersCollection/1",
"_rev" : "_YSk2J1K--_",
"name" : "A",
"emails" : [
"aa@aa.aa",
"bb@bb.bb"
]
}
]
推荐阅读
- r - 无法向图表添加图例
- unpoly - 模态和抽屉的unpoly
- elixir - Elixir 自定义任务未显示在“混合帮助”中
- javascript - 获取 WebUSB API 中可用的 USB 设备列表
- javascript - 有没有办法让窗户自行关闭?
- python - 带有自定义主循环的 python socketio 服务器
- javascript - 持久化有状态的 React 组件
- pdf - SwiftUI 使用 PDFKit 将 PDF 保存到远程文件
- python - PsyNet 实验抛出与 requirements.txt 相关的错误
- python - Docker django.db.utils.OperationalError:无法将主机名“db”转换为地址:名称解析暂时失败