在ArangoDB中插入或更新文档失败,违反了约束

在ArangoDB中插入或更新文档失败,违反了约束,arangodb,Arangodb,我希望在ArangoDB中实现一个Upsert,但我无法使用的文档中提供的示例来实现它。我的请求失败,并显示违反了唯一约束的错误消息 我在集合中插入带有特定\u键的文档,并且覆盖选项设置为真,如文档中所述,但仍会收到错误消息。下面是在我的环境中所描述的curl调用的结果 呼叫#1: curl -X POST --header 'accept: application/json'\ --data-binary @- --dump - \ http

我希望在ArangoDB中实现一个Upsert,但我无法使用的文档中提供的示例来实现它。我的请求失败,并显示违反了
唯一约束的
错误消息

我在集合中插入带有特定
\u键的文档,并且
覆盖
选项设置为
,如文档中所述,但仍会收到错误消息。下面是在我的环境中所描述的curl调用的结果

呼叫#1:

curl -X POST --header 'accept: application/json'\
             --data-binary @- --dump - \
             http://localhost:8529/_api/document/products\?overwrite\=true \
<<EOF
{ "Hello": "Universe", "_key" : "lock" }
EOF
HTTP/1.1 202 Accepted
X-Content-Type-Options: nosniff
Location: /_db/_system/_api/document/products/lock
Etag: "_X28xHz---_"
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 58  

{"_id":"products/lock","_key":"lock","_rev":"_X28xHz---_"}
HTTP/1.1 409 Conflict
X-Content-Type-Options: nosniff
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 153

{"error":true,"errorMessage":"unique constraint violated - in index 0 of type primary over [\"_key\"]; conflicting key: lock","code":409,"errorNum":1210}
version: '3'
services:
  db:
    image: arangodb/arangodb:3.4.0
    ports:
    - "8529:8529"
    environment:
      ARANGO_NO_AUTH: 1
    volumes:
      - ./arangodb3:/var/lib/arangodb3
呼叫#2:(识别第一个)

我浏览了文档,启用并查看了服务器日志,但我无法理解。任何帮助都将不胜感激

编辑1:

curl -X POST --header 'accept: application/json'\
             --data-binary @- --dump - \
             http://localhost:8529/_api/document/products\?overwrite\=true \
<<EOF
{ "Hello": "Universe", "_key" : "lock" }
EOF
HTTP/1.1 202 Accepted
X-Content-Type-Options: nosniff
Location: /_db/_system/_api/document/products/lock
Etag: "_X28xHz---_"
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 58  

{"_id":"products/lock","_key":"lock","_rev":"_X28xHz---_"}
HTTP/1.1 409 Conflict
X-Content-Type-Options: nosniff
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 153

{"error":true,"errorMessage":"unique constraint violated - in index 0 of type primary over [\"_key\"]; conflicting key: lock","code":409,"errorNum":1210}
version: '3'
services:
  db:
    image: arangodb/arangodb:3.4.0
    ports:
    - "8529:8529"
    environment:
      ARANGO_NO_AUTH: 1
    volumes:
      - ./arangodb3:/var/lib/arangodb3
以防万一,如果这有什么帮助的话,我使用Docker在本地运行ArangoDB服务器,并使用以下Docker组件

version: '3'
services:
  db:
    image: arangodb
    ports:
    - "8529:8529"
    environment:
      ARANGO_NO_AUTH: 1
    volumes:
      - ./arangodb3:/var/lib/arangodb3
    command: "--log.level startup=trace --log.level requests=trace --log.level info"
这是服务器的日志:

db_1  | 2018-12-09T08:56:16Z [1] DEBUG {requests} "http-request-begin","0x7f51ac946010","172.20.0.1","POST","HTTP/1.1","/_api/document/products?overwrite=true"
db_1  | 2018-12-09T08:56:16Z [1] TRACE {requests} "http-request-body","0x7f51ac946010","{ \"Hello\": \"Universe\", \"_key\" : \"lock\" }\n"
db_1  | 2018-12-09T08:56:16Z [1] TRACE {requests} "http-request-response","0x7f51ac946010","/_api/document/products?overwrite=true","HTTP\/1.1 409 Conflict\r\nX-Content-Type-Options: nosniff\r\nServer: ArangoDB\r\nConnection: Keep-Alive\r\nContent-Type: application\/json; charset=utf-8\r\nContent-Length: 153\r\n\r\n{\"error\":true,\"errorMessage\":\"unique constraint violated - in index 0 of type primary over [\\\"_key\\\"]; conflicting key: lock\",\"code\":409,\"errorNum\":1210}"
db_1  | 2018-12-09T08:56:16Z [1] TRACE {requests} "http-request-statistics","0x7f51ac946010","172.20.0.1","POST","HTTP/1.1",409,41,153,"/_api/document/products?overwrite=true",read,0.000124931,queue,0.000000000,queue-size,0,request,0.000008106,total,0.017638445,error,false
db_1  | 2018-12-09T08:56:16Z [1] INFO {requests} "http-request-end","0x7f51ac946010","172.20.0.1","POST","HTTP/1.1",409,41,153,"/_api/document/products?overwrite=true",0.017630

我在ArangoDB社区的slack频道上发布了这个问题,那里的优秀人士向我指出,通过overwrite参数的replace insert是在
3.4
中才引入的。根据我的docker compose,我的图像指向arangodb的最新图像,即
3.3.20

我被解释说,这个“官方”存储库(
arangodb
)不一定托管最新的稳定版本的arangodb,而且它可能需要几天才能可用,我应该指出
arangodb/arangodb

我修改了我的
docker compose.yml
文件以使用正确的图像,现在它工作正常

docker compose.yml:

curl -X POST --header 'accept: application/json'\
             --data-binary @- --dump - \
             http://localhost:8529/_api/document/products\?overwrite\=true \
<<EOF
{ "Hello": "Universe", "_key" : "lock" }
EOF
HTTP/1.1 202 Accepted
X-Content-Type-Options: nosniff
Location: /_db/_system/_api/document/products/lock
Etag: "_X28xHz---_"
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 58  

{"_id":"products/lock","_key":"lock","_rev":"_X28xHz---_"}
HTTP/1.1 409 Conflict
X-Content-Type-Options: nosniff
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 153

{"error":true,"errorMessage":"unique constraint violated - in index 0 of type primary over [\"_key\"]; conflicting key: lock","code":409,"errorNum":1210}
version: '3'
services:
  db:
    image: arangodb/arangodb:3.4.0
    ports:
    - "8529:8529"
    environment:
      ARANGO_NO_AUTH: 1
    volumes:
      - ./arangodb3:/var/lib/arangodb3

再次感谢ArangoDB社区的Slack,尤其是@mpoter

作为参考,在编写docker拉取的ArangoDB版本时,作为
最新版本
3.3.20
。您可以接受您的答案,以表明问题已解决。谢谢