我需要检查数据库是否指定了IP地址。
此请求:
echo {"query" : "FOR v in visitors return v.guid"} | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/cursor
返回我的下一个结果:
{"result":["7478d52d-af3e-4a83-9791-4e827dfe9059",null,"8d324b9e-7376-4977-9976-1606045c7086"],"hasMore":false,"cached":false,"extra":{"stats":{"writesExecuted":0,"writesIgnored":0,"scannedFull":3,"scannedIndex":0,"filtered":0,"executionTime":0},"warnings":[]},"error":false,"code":201}
但是当我发送FILTER
的请求时:
echo {"query" : "FOR v in visitors FILTER v.ip == "127.0.0.1" return v.guid"} | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/cursor
我收到错误:
HTTP/1.1 400 Bad Request
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 73
{"error":true,"errorMessage":"expecting comma","code":400,"errorNum":600}
我做错了什么?
此外,如何在没有请求元数据的情况下获取结果,例如:..."hasMore":false,"cached":...
答案 0 :(得分:2)
如果在AQL查询中使用引号,则需要使用单引号,或者转义它们以使json post文档保持有效。
您可以使用jq轻松重新验证您的json:
cat <<EOF |jq .
{"query" : "FOR v in visitors FILTER v.ip == "127.0.0.1" return v.guid"}
EOF
parse error: Invalid numeric literal at line 1, column 56
并通过用单引号替换内部双引号来修复它:
cat <<EOF |jq .
{"query" : "FOR v in visitors FILTER v.ip == '127.0.0.1' return v.guid"}
EOF
{
"query": "FOR v in visitors FILTER v.ip == '127.0.0.1' return v.guid"
}
或使用\
转义双引号:
cat <<EOF |jq .
{"query" : "FOR v in visitors FILTER v.ip == \"127.0.0.1\" return v.guid"}
EOF
{
"query": "FOR v in visitors FILTER v.ip == \"127.0.0.1\" return v.guid"
}
请注意,我在bash中使用此处的文档(<<EOF
),因此可以避免引用其他级别的引用。