{"id":278,"date":"2023-08-05T16:47:28","date_gmt":"2023-08-05T08:47:28","guid":{"rendered":"https:\/\/reverieland.cn\/?p=278"},"modified":"2025-06-11T00:53:36","modified_gmt":"2025-06-10T16:53:36","slug":"aql%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0","status":"publish","type":"post","link":"https:\/\/reverieland.cn\/index.php\/278\/","title":{"rendered":"AQL\u5b66\u4e60\u7b14\u8bb0\uff08\u4e0a\uff09"},"content":{"rendered":"<h3>ArrangoDB\u6587\u6863\/By aakz0347<\/h3>\n<h4>\u4e00\u3001\u4ecb\u7ecd<\/h4>\n<p>\u7c7b\u4f3c\u4e8esql\uff0c\u662fDML\uff0c\u800c\u4e0d\u662fDDL\u3001DCL\u3002<\/p>\n<p>DML\uff1a\u6570\u636e\u64cd\u7eb5\u8bed\u8a00\uff0cSELECT, UPDATE, DELETE<\/p>\n<p>DDL\uff1a\u6570\u636e\u5b9a\u4e49\u8bed\u8a00\uff0cCREATE, ALTER, DROP<\/p>\n<p>DCL\uff1a\u6570\u636e\u5e93\u63a7\u5236\u8bed\u8a00\uff0cGRANT, DENY<\/p>\n<p>DQL\uff1a\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00\uff0cREVOKE, COMMIT, ROLLBACK<\/p>\n<h4>\u4e8c\u3001AQL\u57fa\u7840\u77e5\u8bc6<\/h4>\n<h5>\uff08\u96f6\uff09AQL\u7ed3\u6784<\/h5>\n<p>\u5728 ArangoDB \u4e2d\uff0c\u6709 <code>Database<\/code>\u3001<code>Collection<\/code>\u3001<code>Document<\/code> \u4e09\u7c7b\u57fa\u672c\u6982\u5ff5\u3002Database \u662f Collection \u7684\u96c6\u5408\uff0cCollection \u4e2d\u5b58\u50a8\u7740\u6570\u636e\u8bb0\u5f55\uff0c\u6570\u636e\u8bb0\u5f55\u4e5f\u5c31\u662f Document\u3002<\/p>\n<p>\u5bf9\u6bd4\u5173\u7cfb\u6570\u636e\u5e93\uff1a<\/p>\n<ul>\n<li><code>Database<\/code> \u4e0e\u5173\u7cfb\u6570\u636e\u5e93\u4e2d\u7684\u6570\u636e\u5e93\u6982\u5ff5\u3001\u4f5c\u7528\u76f8\u540c\uff0c\u7528\u4e8e\u6743\u9650\u63a7\u5236\u3001\u754c\u9650\u5212\u5206\uff0cArangoDB \u4e2d\u9ed8\u8ba4\u7684 Database \u79f0\u4e3a <code>_system<\/code>\uff1b<\/li>\n<li><code>Collection<\/code> \u76f8\u5f53\u4e8e\u5173\u7cfb\u6570\u636e\u5e93\u4e2d\u7684<strong>\u8868<\/strong>\uff1b<\/li>\n<li><code>Document<\/code> \u5219\u76f8\u5f53\u4e8e\u8868\u4e2d\u7684<strong>\u884c<\/strong>\uff0c\u4f46\u4e0d\u540c\u4e8e\u5173\u7cfb\u6570\u636e\u5e93\uff0cDocument \u4e2d\u5217\u4e0d\u56fa\u5b9a\uff0c\u6bcf\u4e2a Document \u90fd\u5305\u542b\u7740\u968f\u673a\u7684\u4efb\u610f\u6570\u91cf\u7684\u952e\u503c\u5bf9\u3002\u6bcf\u4e2a Document \u90fd\u6709\u4e00\u4e2a\u9ed8\u8ba4\u5c5e\u6027 <code>_key<\/code> \uff0c\u5b83\u662f\u72ec\u4e00\u65e0\u4e8c\u7684\u3001\u4e0d\u53ef\u66f4\u6539\u7684\u3001\u53ef\u81ea\u52a8\u751f\u6210\u7684\uff0cDocument \u8fd8\u6709\u53e6\u4e00\u4e2a\u9ed8\u8ba4\u5c5e\u6027 <code>_id<\/code> \uff0c\u5b83\u7b49\u4e8e <code>&lt;collection name&gt;\/&lt;document _key&gt;<\/code>\u3002<\/li>\n<\/ul>\n<h5>\uff08\u4e00\uff09AQL\u8bed\u6cd5<\/h5>\n<p>1.\u8981\u4e48\u8fdb\u884c\u6570\u636e\u68c0\u7d22\uff08\u67e5\u8be2\uff09\uff0c\u8981\u4e48\u8fdb\u884c\u6570\u636e\u4fee\u6539\uff1a<\/p>\n<p>\u5bf9\u4e8e\u67e5\u8be2\uff0c\u5fc5\u987b\u4f7f\u7528<strong>RETURN<\/strong>\uff1b\u5bf9\u4e8e\u4fee\u6539\uff0c\u6709\u5173\u952e\u5b57<strong>INSERT, UPDATE<\/strong>\u7b49<\/p>\n<p>2.\u4e00\u4e2a\u8bed\u53e5\u4e2d\uff0c\u53ea\u80fd\u5141\u8bb8\u4e00\u6b21\u67e5\u8be2<\/p>\n<pre><code class=\"language-mysql\">3.AQL\u6ce8\u91ca\uff1a    \/*this is a comment*\/<\/code><\/pre>\n<p>4.KEEP, COUNT, OPTIONS, PRUNE, SEARCH, TO\u5173\u952e\u5b57\u4e0d\u662f\u4fdd\u7559\u5173\u952e\u5b57\uff0c\u53ef\u4ee5\u7528\u4f5c\u5c5e\u6027\u540d\u79f0\uff0c\u4f46\u662fAQL\u53ef\u4ee5\u7c7b\u6bd4sql\u628a\u5b83\u4eec\u8bc6\u522b\u4e3a\u7c7b\u4f3c\u5173\u952e\u5b57\uff1a<\/p>\n<pre><code class=\"language-mysql\">KEEP = COLLECT\nCOUNT(WITH COUNT INTO) = COLLECT\nOPTIONS = FOR\/SEARCH\/COLLECT\/INSERT\/UPDATE\/...\nPRUNE:\u56fe\u904d\u5386<\/code><\/pre>\n<p>5.<strong>\u5173\u952e\u5b57<\/strong>\u4e0d\u533a\u5206\u5927\u5c0f\u5199\uff0c\u4f46<strong>\u540d\u79f0<\/strong>\u533a\u5206\u5927\u5c0f\u5199<\/p>\n<p>6.\u547d\u540d\uff1a\u907f\u514d\u4f7f\u7528\u7279\u6b8a\u5b57\u7b26\uff0c\u5c5e\u6027\u540d\u79f0\u4e0d\u8981\u4ee5\u4e0b\u5212\u7ebf\u5f00\u5934\uff0c\u5c5e\u6027\u957f\u5ea6\u65e0\u8981\u6c42<\/p>\n<h5>\uff08\u4e8c\uff09AQL\u6570\u636e\u7c7b\u578b<\/h5>\n<p>null, boolean, number, string, array, object<\/p>\n<p>1.number:\u6574\u6570\u6216\u8005\u5c0f\u6570\uff0c\u53ea\u8981\u662f\u5b9e\u6570\u90fd\u53ef\u4ee5\uff1b\u652f\u6301+ - \u4ee5\u53ca\u5c0f\u6570\u70b9<\/p>\n<p>2.string:<strong>\u5fc5\u987b\u7528\u5355\u5f15\u53f7\u6216\u8005\u53cc\u5f15\u53f7\u62ec\u8d77\u6765<\/strong>\uff0c\u7f16\u7801\u7c7b\u578b\u4e3aUTF-8<\/p>\n<pre><code class=\"language-mysql\">\"this is a word\"\n\"this is a \"quoted\"\" word\"    \/*\u4f7f\u7528\u53cd\u659c\u6760\u8f6c\u4e49*\/<\/code><\/pre>\n<p>3.\u5bf9\u4e8e\u590d\u5408\u7c7b\u578barray, object\uff1a<\/p>\n<p>array\u6570\u7ec4\uff0c\u7c7b\u4f3c\u4e8epython\uff0c\u901a\u8fc7<u>\u5b83\u4eec\u7684\u4f4d\u7f6e<\/u>\u6765\u8bbf\u95ee\u6570\u7ec4\u5143\u7d20\uff0c\u5f62\u5982u.friends[0]<\/p>\n<p>[ -999, \"yikes\", [false, \"no\"], 1, kkk ]<\/p>\n<p>object\u5bf9\u8c61\uff0c\u5bf9\u8c61\u4e2d\u7684<u>\u6bcf\u4e2a\u5c5e\u6027<\/u>\u90fd\u662f\u4e00\u4e2a\u952e\u503c\u5bf9\u3002<\/p>\n<p>{\"name888\": mark01}<\/p>\n<pre><code class=\"language-mysql\">\/*\u5c5e\u6027\u7684\u901f\u8bb0\u547d\u540d*\/\nLET name = \"Peter\"\nLET age = 42\nRETURN {name, age}\n\/*\u8868\u8fbe\u5f0f\u53ef\u4ee5\u4f5c\u4e3a\u5c5e\u6027\u503c:\u5c5e\u6027name,address;address\u4e0b\u6709\u4e24\u4e2a\u5206\u5c5e\u6027street\u548czip*\/\n{ \"name\" : \"John\", likes : [ \"Swimming\", \"Skiing\" ], \"address\" : { \"street\" : \"Cucumber lane\", \"zip\" : \"94242\" } }<\/code><\/pre>\n<p>4.\u70b9\u8bbf\u95ee\u5f62\u5f0f u.address.city.name<\/p>\n<h5>\uff08\u4e09\uff09\u7ed1\u5b9a\u53c2\u6570<\/h5>\n<pre><code class=\"language-mysql\">FILTER u.name == mark   \/*  \u4e0d\u80fd\u7528u.name ==\"mark\"  *\/\nFOR doc IN DocumentTable<\/code><\/pre>\n<pre><code class=\"language-mysql\">FOR u IN users\n  FILTER u.id == CONCAT('prefix', @id, 'suffix') &amp;&amp; u.name == @name\n  RETURN u\n\/* CONCAT()\u662f\u62fc\u63a5\u51fd\u6570 *\/<\/code><\/pre>\n<pre><code class=\"language-mysql\">LET doc = { arg1:{agr2:\"abc\"} }\nRETURN doc.arg1.arg2    \/*\u8fd4\u56deabc*\/<\/code><\/pre>\n<h5>\uff08\u56db\uff09\u7c7b\u578b\u548c\u503c\u7684\u5927\u5c0f\u987a\u5e8f<\/h5>\n<p>null\u5c0f\u4e8e\u4e00\u5207\uff0c[ ]\u5c0f\u4e8e{ }\uff0c''\u5c0f\u4e8e' ', '0', 'abc', [ ], { }<\/p>\n<h5>\uff08\u4e94\uff09\u4ece\u96c6\u5408\u8bbf\u95ee\u6570\u636e<\/h5>\n<pre><code class=\"language-mysql\">FOR u IN users\n  FILTER u.age &lt; 39\n  RETURN u<\/code><\/pre>\n<p>\u5c06\u8fd4\u56de\u96c6\u5408users\u4e2d<strong>\u5c5e\u6027age<\/strong>\u7684\u503c\u5c0f\u4e8e39\u7684\u6240\u6709\u6587\u6863\uff0c\u4ee5\u53ca\u96c6\u5408\u4e2d\u6839\u672c\u6ca1\u6709\u5c5e\u6027age\u7684\u6240\u6709\u6587\u6863\u3002<\/p>\n<h5>\uff08\u516d\uff09\u5b50\u67e5\u8be2<\/h5>\n<pre><code class=\"language-mysql\">\/*\u8fd4\u56de\u952e\u503c\u5bf9*\/\nFOR p IN persons\n  LET recommendations = (\n    FOR r IN recommendations\n      FILTER p.id == r.personId\n      SORT p.rank DESC\n      LIMIT 10\n      RETURN r\n  ) \n  RETURN { person : p, recommendations : recommendations }<\/code><\/pre>\n<pre><code class=\"language-mysql\">\/*\u5b50\u67e5\u8be2\u5728\u51fd\u6570\u4e2d\u7684\u7528\u6cd5*\/\nFOR p IN persons\n  COLLECT city = p.city INTO g\n  RETURN {\n    city : city,\n    numPersons : LENGTH(g),\n    maxRating: MAX( \n      FOR r IN g\n      RETURN r.p.rating\n    ) \/*\u5b50\u67e5\u8be2\u7ed3\u675f*\/\n  }<\/code><\/pre>\n<pre><code class=\"language-mysql\">\/*\u5b50\u67e5\u8be2\u7ed3\u679c\u5c55\u5f00*\/\nFOR elem IN (RETURN [1,2,3])\n    RETURN elem<\/code><\/pre>\n<h5>\uff08\u4e03\uff09\u67e5\u8be2\u7ed3\u679c\u7684\u5f62\u5f0f<\/h5>\n<pre><code class=\"language-mysql\">\/*\u67e5\u8be2\u6240\u6709\u7ed3\u679c*\/\nFOR u IN users\n    RETURN u\n\/*\u8f93\u51fa*\/\n[\n  { \"id\": 1, \"name\": \"John\", \"active\": false },\n  { \"age\": 32, \"id\": 2, \"name\": \"Vanessa\" },\n  { \"friends\": [ \"John\", \"Vanessa\" ], \"id\": 3, \"name\": \"Amy\" }\n]\n\n\/*\u67e5\u8be2\u7279\u5b9a\u7684\u7ed3\u679c\uff0c\u7b5b\u9009\u4e00\u4e9b\u5c5e\u6027\u6765\u8f93\u51fa*\/\nFOR u IN users\n    RETURN { \"id\": u.id, \"name\": u.name }\n\/*\u8f93\u51fa*\/\n[\n  { \"id\": 1, \"name\": \"John\" },\n  { \"id\": 2, \"name\": \"Vanessa\" },\n  { \"id\": 3, \"name\": \"Amy\" }\n]\n\n\/*\u53ea\u8f93\u51fa\u7279\u5b9a\u7684\u503c*\/\nFOR u IN users\n    RETURN u.id\n\/*\u8f93\u51fa*\/\n[1,2,3]<\/code><\/pre>\n<h4>\u4e09\u3001\u8fd0\u7b97\u7b26<\/h4>\n<h5>\uff08\u4e00\uff09\u6bd4\u8f83\u8fd0\u7b97\u7b26<\/h5>\n<p>IN, NOT IN \u6d4b\u8bd5\u503c\u662f\u5426\u5305\u542b\/\u4e0d\u5305\u542b\u5728\u6570\u7ec4\u4e2d<\/p>\n<p>LIKE, NOT LIKE \u6a21\u5f0f\u5339\u914d\uff0c\u901a\u5e38\u4f7f\u7528\u4e0b\u5212\u7ebf\u6216\u8005\u767e\u5206\u53f7_ %<\/p>\n<pre><code class=\"language-mysql\">\/*\u4ee5\u4e0b\u8868\u8fbe\u5f0f\u7684\u503c\u5747\u4e3atrue*\/\n\"abc\" LIKE \"a%\"\n\"abc\" LIKE \"_bc\"\n\"a_foo\" LIKE \"a\\_foo\"      \/*\u8f6c\u4e49*\/<\/code><\/pre>\n<p>\u5bf9\u4e8eNOT LIKE\uff0c\u610f\u601d\u662f\u6392\u9664\u957f\u8fd9\u6837\u7684\u5b57\u7b26\uff0c\u76f8\u5f53\u4e8e NOT ( ...LIKE... )<\/p>\n<h5>\uff08\u4e8c\uff09\u6570\u7ec4\u6bd4\u8f83\u8fd0\u7b97\u7b26<\/h5>\n<p>ALL, ANY, NONE\u662f\u4fee\u9970\u5173\u952e\u5b57\uff0c\u53ef\u4ee5\u642d\u914dIN, ==, !=, &gt;\u7b49\u6765\u4f7f\u7528<\/p>\n<pre><code class=\"language-mysql\">[1,2,3] ALL IN [1,2,4]      false\n[1,2,3] NONE IN [4,5,6]         true\n[1,2,3] ANY IN [1,2,50,51,52]       true\n[1,2,3] AT LEAST (2) IN [2,3,50,51,52]      true<\/code><\/pre>\n<h5>\uff08\u4e09\uff09\u903b\u8f91\u8fd0\u7b97\u7b26<\/h5>\n<p>\u7528&amp;&amp; || ! \u548c AND OR NOT\u90fd\u53ef\u4ee5<\/p>\n<h5>\uff08\u56db\uff09\u7b97\u6570\u8fd0\u7b97\u7b26<\/h5>\n<p>1.RETURN \u652f\u6301\u5e38\u89c4\u8fd0\u7b97 RETURN[-x, +y]<\/p>\n<p>2.\u4e0d\u652f\u6301**exp\u6c42\u5e42\uff0c\u8981\u7528POW()\uff1b\u4e0d\u652f\u6301\u52a0\u53f7\u6765\u62fc\u63a5\u5b57\u7b26\u4e32\uff0c\u8981\u7528CONCAT()\u3002<\/p>\n<h5>\uff08\u4e94\uff09\u8303\u56f4\u8fd0\u7b97\u7b26<\/h5>\n<p>\u4f7f\u7528\u4e24\u4e2a\u5c0f\u6570\u70b9\u6765\u8868\u793a\uff0c\u4f8b\u59822010..2013\u7b49\u4ef7\u4e8e[2010,2011,2012,2013]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5305\u542bAQL\u57fa\u7840\u77e5\u8bc6\u4ee5\u53ca\u8bed\u53e5\u7ed3\u6784\u793a\u4f8b<\/p>\n","protected":false},"author":1,"featured_media":271,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[30],"tags":[29,28,41],"class_list":["post-278","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-30","tag-aql","tag-arangodb","tag-41"],"_links":{"self":[{"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/posts\/278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/comments?post=278"}],"version-history":[{"count":2,"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/posts\/278\/revisions"}],"predecessor-version":[{"id":281,"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/posts\/278\/revisions\/281"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/media\/271"}],"wp:attachment":[{"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/media?parent=278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/categories?post=278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/reverieland.cn\/index.php\/wp-json\/wp\/v2\/tags?post=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}