{"id":4187,"date":"2017-11-14T11:00:49","date_gmt":"2017-11-14T19:00:49","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4187"},"modified":"2025-06-13T20:28:08","modified_gmt":"2025-06-14T03:28:08","slug":"sql-for-json-query-interface-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/sql-for-json-query-interface-couchbase-mobile\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c 2.0\uc758 \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4 \uc18c\uac1c"},"content":{"rendered":"<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8 2.0 \ub9b4\ub9ac\uc988\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ub2e4\uc591\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html\">\uc0c8\ub85c\uc6b4 \uae30\ub2a5 \ubc0f \uac1c\uc120 \uc0ac\ud56d<\/a>. \uc774\ub7ec\ud55c \uac1c\uc120 \uc0ac\ud56d \uc911 \ud558\ub098\uc778 \uc0c8\ub85c\uc6b4 \ubcf5\uc81c \ud504\ub85c\ud1a0\ucf5c\uc5d0 \ub300\ud574\uc11c\ub294 \uc774\uc804 \ube14\ub85c\uadf8\uc5d0\uc11c \ub17c\uc758\ud588\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/data-replication-couchbase-mobile\/\">\ubcf5\uc81c 2.0\uc5d0 \ub300\ud55c \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c<\/a>. \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 \ub610 \ub2e4\ub978 \uc8fc\uc694 \uae30\ub2a5\uc778 Couchbase Lite \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ub300\ud574 \uc18c\uac1c\ud569\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4\ub294 \ub2e4\uc74c\uc744 \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/products\/n1ql\/\">N1QL<\/a>\ub294 JSON\uc6a9 SQL\uc744 \ud655\uc7a5\ud558\ub294 Couchbase\uc758 \uc120\uc5b8\uc801 \ucffc\ub9ac \uc5b8\uc5b4\uc785\ub2c8\ub2e4. SQL\uc5d0 \uc775\uc219\ud558\ub2e4\uba74 \uc0c8\ub85c\uc6b4 API\uc758 \uc758\ubbf8\ub97c \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uae00\uc5d0\uc11c\ub294 \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ub300\ud574 \uc18c\uac1c\ud558\uace0 \uae30\ubcf8\uc801\uc778 \ub0b4\uc6a9\uc744 \ub2e4\ub8f9\ub2c8\ub2e4. \uace0\uae09 \ucffc\ub9ac \uae30\ub2a5\uc5d0 \ub300\ud55c \ub2e4\ub978 \uad00\ub828 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc774 \uae00\uc758 \ub9c8\uc9c0\ub9c9 \uc139\uc158\uc744 \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<p>Couchbase Mobile 2.0 \uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \ube4c\ub4dc\ub294 \ub2e4\uc74c\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html\">\ub2e4\uc6b4\ub85c\ub4dc<\/a> \ud398\uc774\uc9c0\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<p><!--more--><\/p>\n<h3 id=\"background\">\ubc30\uacbd<\/h3>\n<p>1.x \ubc84\uc804\uc758 Couchbase Mobile\uc744 \uc0ac\uc6a9 \uc911\uc774\uc2dc\ub77c\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \uc775\uc219\ud558\uc2e4 \uac83\uc785\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/training\/develop\/using-the-database\/index.html#query-documents\">\ub9f5 \ubcf4\uae30<\/a> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc778\ub371\uc2a4\uc640 \ucffc\ub9ac\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. 2.0\uc5d0\uc11c\ub294 \ub354 \uc774\uc0c1 \ubdf0\uc640 \ub9f5 \ud568\uc218\ub97c \ub9cc\ub4e4 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4! \ub300\uc2e0, \uac04\ub2e8\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud1b5\ud574 \uc778\ub371\uc2a4\ub97c \uc0dd\uc131\ud558\uace0 \ucffc\ub9ac \ube4c\ub354 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud574 \ucffc\ub9ac\ub97c \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4\ub294 \uc0ac\uc6a9\ud558\uae30 \ub354 \uac04\ub2e8\ud558\uace0 \ud6e8\uc52c \ub354 \uac15\ub825\ud569\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c \uba87 \uac00\uc9c0 \uae30\ub2a5\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 id=\"sampleproject\">\uc0d8\ud50c \ud504\ub85c\uc81d\ud2b8<\/h3>\n<p>\uc5ec\uae30\uc11c \uc124\uba85\ud558\ub294 \uc608\uc81c\uc5d0\uc11c\ub294 iOS\uc6a9 Swift\ub97c \uc0ac\uc6a9\ud558\uc9c0\ub9cc, \uba87 \uac00\uc9c0 \uc0ac\uc18c\ud55c \ucc28\uc774\uc810\uc744 \uc81c\uc678\ud558\uace0\ub294 Android \ubc0f Windows \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub3c4 \ub3d9\uc77c\ud55c \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4\uac00 \uc9c0\uc6d0\ub41c\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694. \ub530\ub77c\uc11c \uc57d\uac04\uc758 \uc218\uc815\ub9cc \ud558\uba74 \ub2e4\ub978 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uc791\uc5c5\ud560 \ub54c \uc774 \uae00\uc758 \uc608\uc81c\ub97c \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc0d8\ud50c Swift \ud504\ub85c\uc81d\ud2b8\uc5d0 \uad00\uc2ec\uc774 \uc788\ub2e4\uba74 \uc544\ub798 \uc9c0\uce68\uc744 \ub530\ub974\uc138\uc694.<\/p>\n<ul>\n<li>GitHub\uc5d0\uc11c iOS Swift \ud50c\ub808\uc774\uadf8\ub77c\uc6b4\ub4dc \ubcf5\uc81c\ud558\uae30\n<pre><code class=\"bash\">$ git clone https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground<\/code><\/pre>\n<\/li>\n<li>\ud574\ub2f9 \ud56d\ubaa9\uc758 \uc124\uce58 \uc9c0\uce68\uc744 \ub530\ub974\uc138\uc694. <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-a_pi-playground\/blob\/master\/README.md\">README<\/a> \ud30c\uc77c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud50c\ub808\uc774\uadf8\ub77c\uc6b4\ub4dc\ub97c \ube4c\ub4dc\ud558\uace0 \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h3 id=\"sampledatamodel\">\uc0d8\ud50c \ub370\uc774\ud130 \ubaa8\ub378<\/h3>\n<p>\ub2f9\uc0ac\ub294 \ub2e4\uc74c \uc704\uce58\uc758 \uc5ec\ud589 \uc0d8\ud50c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground\/tree\/master\/travel-sample.cblite2\">\uc5ec\uae30<\/a><\/p>\n<p>\uc0d8\ud50c \ub370\uc774\ud130 \uc138\ud2b8\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc5ec\ub7ec \uc720\ud615\uc758 \ubb38\uc11c\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. <code>\uc720\ud615<\/code> \uc18d\uc131\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\uc5d0 \ucd08\uc810\uc744 \ub9de\ucd9c \uac83\uc785\ub2c8\ub2e4. <code>\uc720\ud615<\/code> <em>\"\ud638\ud154\"<\/em> \uadf8\ub9ac\uace0 <em>\"\ub79c\ub4dc\ub9c8\ud06c\"<\/em>. JSON \ubb38\uc11c \ubaa8\ub378\uc740 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4. \ub2e8\uc21c\ud654\ub97c \uc704\ud574 \uc544\ub798 \ubaa8\ub378\uc5d0\uc11c \uc77c\ubd80 \uc18d\uc131\uc740 \uc0dd\ub7b5\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/12\/data_model-2.png\" alt=\"\" \/><\/figure>\n<h3 id=\"thebasics\">\uae30\ubcf8 \uc0ac\ud56d<\/h3>\n<h4 id=\"openingcreatingadatabase\">\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f4\uae30\/\uc0dd\uc131<\/h4>\n<p>\uc544\ub798\uc758 \ubaa8\ub4e0 \ucffc\ub9ac\uc5d0\ub294 <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/guides\/couchbase-lite\/native-api\/database\/index.html\"><code>\ub370\uc774\ud130\ubca0\uc774\uc2a4<\/code><\/a> API\ub97c \uc0ac\uc6a9\ud558\uc5ec CouchbaseLite \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f4\uac70\ub098 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"swift\">  var options =  DatabaseConfiguration()\r\n  let db = try Database(name: kDBName, config: options)<\/code><\/pre>\n<h4 id=\"indexes\">\uc0c9\uc778<\/h4>\n<p>\uc77d\uae30 \ucffc\ub9ac \uc18d\ub3c4\ub97c \ub192\uc774\ub824\uba74 \ucffc\ub9ac\ud560 \uc18d\uc131\uc5d0 \uc778\ub371\uc2a4\ub97c \ub9cc\ub4e4\uba74 \ub429\ub2c8\ub2e4. \ub300\uaddc\ubaa8 \ub370\uc774\ud130 \uc138\ud2b8\uc5d0\uc11c \uc131\ub2a5 \ud5a5\uc0c1\uc740 \uc0c1\ub2f9\ud560 \uac83\uc785\ub2c8\ub2e4. \ubb3c\ub860 \uc778\ub371\uc2a4\ub97c \uc800\uc7a5\ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \uc2a4\ud1a0\ub9ac\uc9c0\uac00 \uc99d\uac00\ud558\uace0 \uc4f0\uae30 \uc131\ub2a5\uc5d0\ub3c4 \uc601\ud5a5\uc744 \ubbf8\uce60 \uc218 \uc788\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694. \ub530\ub77c\uc11c \ub108\ubb34 \ub9ce\uc740 \uc778\ub371\uc2a4\ub97c \ub9cc\ub4e4\uc9c0 \uc54a\ub3c4\ub85d \uc8fc\uc758\ud558\uc138\uc694.<\/p>\n<p>\ub2e4\uc74c \uc608\uc81c\uc5d0\uc11c\ub294 <code>ValueIndex<\/code> \uc5d0\uc11c <code>\uc720\ud615<\/code> \ubb38\uc11c\uc758 \uc18d\uc131<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">    db.createIndex(IndexBuilder.valueIndex(items: ValueIndexItem.property(\"type\")),withName: \"typeIndex\")<\/pre>\n<p>\ub2e4\uc74c \uc608\uc81c\uc5d0\uc11c\ub294 <code>ValueIndex<\/code> on <code>\uc720\ud615<\/code> \uadf8\ub9ac\uace0 <code>\uc774\ub984<\/code> \ubb38\uc11c\uc758 \uc18d\uc131<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">try db.createIndex(IndexBuilder.valueIndex(items: ValueIndexItem.property(\"type\"),ValueIndexItem.property(\"name\")),withName: \"TypeNameIndex\")<\/pre>\n<h4 id=\"fetchingdocumentsfromdatabase\">\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ubb38\uc11c \uac00\uc838\uc624\uae30<\/h4>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8\uc758 \ucffc\ub9ac\ub294 \ucffc\ub9ac \ube4c\ub354 API\ub97c \uc0ac\uc6a9\ud558\uc5ec \uad6c\uc131\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798 \ucffc\ub9ac\ub294 \uc9c0\uc815\ub41c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ubaa8\ub4e0 \ubb38\uc11c\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. \ucffc\ub9ac\uc640 \uc77c\uce58\ud558\ub294 \ubaa8\ub4e0 \ubb38\uc11c\uc5d0 \ub300\ud574 \ubb38\uc11c\uc640 \uad00\ub828\ub41c \ubaa8\ub4e0 \uc18d\uc131\uc744 \uac00\uc838\uc635\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let searchQuery = QueryBuilder\r\n        .select(SelectResult.all())\r\n        .from(DataSource.database(db))<\/pre>\n<h4 id=\"fetchingdocumentsfromdatabasewithpagination\">\ud398\uc774\uc9c0 \ub9e4\uae40\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ubb38\uc11c \uac00\uc838\uc624\uae30<\/h4>\n<p>\ub2e4\uc74c\uc740 \ub2e4\uc74c\uc744 \uac00\uc838\uc624\ub294 \uac04\ub2e8\ud55c \ucffc\ub9ac\uc758 \uad6c\uc870\uc785\ub2c8\ub2e4. <code>limit<\/code> \uc9c0\uc815\ub41c \uc704\uce58\uc5d0\uc11c \uc2dc\uc791\ud558\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ubb38\uc11c \uc218 <code>\uc624\ud504\uc14b<\/code>. \ucffc\ub9ac\uc640 \uc77c\uce58\ud558\ub294 \ubaa8\ub4e0 \ubb38\uc11c\uc5d0 \ub300\ud574 \ubb38\uc11c\uc640 \uad00\ub828\ub41c \ubaa8\ub4e0 \uc18d\uc131\uc744 \uac00\uc838\uc635\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">let searchQuery = QueryBuilder\r\n        .select(SelectResult.all())\r\n        .from(DataSource.database(db))\r\n        .limit(Expression.int(limit),offset: Expression.int(offset))<\/pre>\n<h3 id=\"returnvaluesusingselectresult\">SelectResult\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac12 \ubc18\ud658<\/h3>\n<p>A <code>SelectResult<\/code> \ub294 \ucffc\ub9ac \ubb38\uc758 \ub2e8\uc77c \ubc18\ud658 \uac12\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4. Couchbase Lite\uc758 \ubb38\uc11c\ub294 \ud0a4-\uac12 \uc30d\uc758 \uc0ac\uc804\uc73c\ub85c \uc9c0\uc815\ub41c \ubb38\uc11c \uc18d\uc131\uacfc \uad00\ub828 \uba54\ud0c0\ub370\uc774\ud130\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. \uba54\ud0c0\ub370\uc774\ud130\ub294 \ubb38\uc11c\uc5d0 \uc5f0\uacb0\ub41c \ubb38\uc11c Id\uc640 \uc2dc\ud000\uc2a4 Id\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. \ubb38\uc11c\ub97c \ucffc\ub9ac\ud560 \ub54c \ubb38\uc11c \uba54\ud0c0\ub370\uc774\ud130\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \ubc18\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uba54\ud0c0\ub370\uc774\ud130\ub97c \uba85\uc2dc\uc801\uc73c\ub85c \ucffc\ub9ac\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li><code>SelectResult.all()<\/code>\n<ul>\n<li>\ubb38\uc11c\uc640 \uad00\ub828\ub41c \ubaa8\ub4e0 \ud504\ub85c\ud37c\ud2f0\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li><code>SelectResult(\ud45c\ud604\uc2dd)<\/code>\n<ul>\n<li>\ub97c \uae30\uc900\uc73c\ub85c \ubb38\uc11c\uc758 \uc18d\uc131\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4. <code>\ud45c\ud604\uc2dd<\/code>. \ub2e4\uc591\ud55c \uc720\ud615\uc758 \ud45c\ud604\uc2dd\uc5d0 \ub300\ud574\uc11c\ub294 \uc7a0\uc2dc \ud6c4\uc5d0 \uc124\uba85\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li><code>SelectResult.expression(Expression.Meta.id)<\/code>\n<ul>\n<li>\ubb38\uc11c ID \ubc18\ud658<\/li>\n<\/ul>\n<\/li>\n<li><code>SelectResult.expression(Expression.Meta.sequence)<\/code>\n<ul>\n<li>\uc2dc\ud000\uc2a4 ID\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4(\ubcf5\uc81c\uc5d0 \uc0ac\uc6a9\ub428).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\uc27c\ud45c\ub85c \uad6c\ubd84\ub41c \ubaa9\ub85d\uc744 \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>SelectResult<\/code> \ud45c\ud604\uc2dd\uc758 <code>\uc120\ud0dd<\/code> \ucffc\ub9ac\uc758 \ubb38\uc744 \uc791\uc131\ud569\ub2c8\ub2e4.<br \/>\n\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c select \ubb38 \ucffc\ub9ac\ub294 \ubb38\uc11c Id\uc640 <code>\uc720\ud615<\/code> \uadf8\ub9ac\uace0 <code>\uc774\ub984<\/code> \ubb38\uc11c\uc758 \uc18d\uc131<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">select(SelectResult.expression(Expression.Meta.id),\r\n                SelectResult.expression(Expression.property(\"type\")),\r\n                SelectResult.expression(Expression.property(\"name\")))<\/pre>\n<h3 id=\"queryexpression\">\ucffc\ub9ac \ud45c\ud604\uc2dd<\/h3>\n<p>\ucffc\ub9ac \ud45c\ud604\uc2dd\uc740 \ucffc\ub9ac \ubb38\uc744 \uad6c\uc131\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8\ub294 \ub2e4\uc74c\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. <code>\ud45c\ud604\uc2dd<\/code> \uc720\ud615.<\/p>\n<ul>\n<li>\uc18d\uc131<\/li>\n<li>\uc9d1\uacc4<\/li>\n<li>\ubb38\uc790\uc5f4<\/li>\n<li>\ub370\uc774\ud130 \uc815\ub82c<\/li>\n<li>\uc815\uaddc\uc2dd<\/li>\n<li>FTS<\/li>\n<li>\ub110 \uac80\uc0ac \uc5f0\uc0b0\uc790<\/li>\n<li>\uc0b0\uc220 \ud45c\ud604\uc2dd<\/li>\n<li>\uba54\ud0c0\ub370\uc774\ud130<\/li>\n<li>\ud328\ud134 \ub9e4\uce6d<\/li>\n<li>\ube44\uad50<\/li>\n<li>\uceec\ub809\uc158<\/li>\n<li>\uae30\ub2a5<\/li>\n<li>\ub9e4\uac1c\ubcc0\uc218<\/li>\n<li>\uc815\ub7c9\ud654<\/li>\n<li>\ube44\ud2b8 \uc5f0\uc0b0\uc790<\/li>\n<\/ul>\n<h3 id=\"processingqueryresponses\">\ucffc\ub9ac \uc751\ub2f5 \ucc98\ub9ac<\/h3>\n<p>\ucffc\ub9ac \uc2e4\ud589 \uacb0\uacfc\ub294 \ubc30\uc5f4\uc758 \ubaa8\ub4e0 \uba64\ubc84\uac00 \ucffc\ub9ac\ub97c \ub9cc\uc871\ud558\ub294 \ubb38\uc11c\uc5d0 \ud574\ub2f9\ud558\ub294 Dictionary\/Map\uc778 \ubc30\uc5f4\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">select(SelectResult.expression(Expression.Meta.id),\r\n                SelectResult.expression(Expression.property(\"type\")),\r\n                SelectResult.expression(Expression.property(\"name\")))<\/pre>\n<ul>\n<li>\ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc11c\uc758 \ubaa8\ub4e0 \uc18d\uc131\uc744 \ucffc\ub9ac\ud558\ub294 \uacbd\uc6b0 <code>SelectResult.all()<\/code>\ub97c \uc0ac\uc6a9\ud558\uba74 \uc751\ub2f5 \ubc30\uc5f4\uc758 \uac01 \uba64\ubc84\ub294 \ud0a4-\uac12 \uc30d\uc73c\ub85c, \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc774\ub984\uc774 \ud0a4\uc774\uace0 \ubb38\uc11c\uc5d0 \ud574\ub2f9\ud558\ub294 \uc0ac\uc804\uc774 \ud0a4\uc758 \uac12\uc785\ub2c8\ub2e4.\uc608\ub97c \ub4e4\uc5b4, \ub2e4\uc74c \ucffc\ub9ac\ub97c \uace0\ub824\ud558\uc2ed\uc2dc\uc624.<\/li>\n<\/ul>\n<pre class=\"wrap:true lang:swift decode:true\">let searchQuery = QueryBuilder\r\n        .select(SelectResult.all())\r\n        .from(DataSource.database(db))\r\n        .limit(Expression.int(limit),offset: Expression.int(offset))<\/pre>\n<ul>\n<li>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4(\"travel-sample\"\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uc774\ub984\uc785\ub2c8\ub2e4).\n<pre><code class=\"json\">[\r\n    {\r\n        \"travel-sample\": {\r\n            \"callsign\": \"MILE-AIR\",\r\n            \"country\": \"United States\",\r\n            \"iata\": \"Q5\",\r\n            \"icao\": \"MLA\",\r\n            \"id\": 10,\r\n            \"name\": \"40-Mile Air\",\r\n            \"type\": \"airline\"\r\n        }\r\n    },\r\n    {\r\n        \"travel-sample\": {\r\n            \"callsign\": \"TXW\",\r\n            \"country\": \"United States\",\r\n            \"iata\": \"TQ\",\r\n            \"icao\": \"TXW\",\r\n            \"id\": 10123,\r\n            \"name\": \"Texas Wings\",\r\n            \"type\": \"airline\"\r\n        }\r\n    }\r\n]\r\n<\/code><\/pre>\n<p>\uc544\ub798 \ucf54\ub4dc \uc2a4\ub2c8\ud3ab\uc740 \uc704\uc758 \uacb0\uacfc\ub97c \ucc98\ub9ac\ud558\uc5ec \ubb38\uc11c \uac1d\uccb4\uc758 \uc138\ubd80 \uc815\ubcf4\ub97c \uac00\uc838\uc624\ub294 \ubc29\ubc95\uc758 \uc608\uc2dc(Swift)\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">for row in try searchQuery.execute() {\r\n        if let dict = row.toDictionary() as? [String:Any], \r\n            let docObject = dict[\"travel-sample\"] as? [String:Any] {\r\n            \/\/ You can now process the document properties \r\n            let name = docObject[\"name\"]\r\n            let type = docObject[\"type\"]\r\n        }\r\n    }<\/pre>\n<p>&nbsp;<\/p>\n<p><code class=\"swift\"><\/code><\/li>\n<li>\ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc11c\uc758 ID\ub97c \ucffc\ub9ac\ud558\ub294 \uacbd\uc6b0 <code>SelectResult.expression(Expression.Meta.id)<\/code>\ub85c \uc124\uc815\ud558\uba74 \uc751\ub2f5 \ubc30\uc5f4\uc758 \uac01 \uba64\ubc84\ub294 \ud0a4-\uac12 \uc30d\uc73c\ub85c, \ub2e4\uc74c\uacfc \uac19\uc774 <code>\"id\"<\/code> \ub97c \ud0a4\ub85c, \ubb38\uc11c Id\ub97c \uac12\uc73c\ub85c \uc785\ub825\ud569\ub2c8\ub2e4.<br \/>\n\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc740 \ucffc\ub9ac\ub97c \uc0dd\uac01\ud574 \ubcf4\uc138\uc694.<\/li>\n<\/ul>\n<pre class=\"wrap:true lang:swift decode:true\" style=\"padding-left: 30px\"> let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id))\r\n        .from(DataSource.database(db))\r\n        .limit(Expression.int(limit))\r\n<\/pre>\n<ul>\n<li>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4.\n<pre><code class=\"json\">    [\r\n        {\r\n            \"id\": \"airline_112\"\r\n        },\r\n        {\r\n            \"id\": \"airline_189\"\r\n        },\r\n        {\r\n            \"id\": \"airline_1209\"\r\n        }\r\n    ]<\/code><\/pre>\n<p>\uc544\ub798 \ucf54\ub4dc \uc2a4\ub2c8\ud3ab\uc740 \uc704\uc758 \uacb0\uacfc\ub97c \ucc98\ub9ac\ud558\uc5ec \ubb38\uc11c Id\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc11c \uac1d\uccb4\uc758 \uc138\ubd80 \uc815\ubcf4\ub97c \uac00\uc838\uc624\ub294 \ubc29\ubc95\uc758 \uc608\uc2dc(Swift)\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> for row in try searchQuery.execute() {\r\n        if let dict = row.toDictionary() as? [String:Any], \r\n            let docId  = dict[\"id\"] as? String {\r\n            \/\/ You can now fetch the details of the document using the Id\r\n            let doc = try db.getDocument(docId)\r\n        }     \r\n    }<\/pre>\n<\/li>\n<li>\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc11c\uc758 \ud2b9\uc815 \uc18d\uc131\/\uc18d\uc131\uc744 \ucffc\ub9ac\ud558\ub294 \uacbd\uc6b0, <code>SelectResult.expression(Expression.property(\"type\"))<\/code>\ub85c \uc124\uc815\ud558\uba74 \uc751\ub2f5 \ubc30\uc5f4\uc758 \uac01 \uba64\ubc84\ub294 \ud0a4-\uac12 \uc30d\uc73c\ub85c, \uc18d\uc131\/\uc18d\uc131\uc758 \uc774\ub984\uc744 \ud0a4\ub85c, \ud574\ub2f9 \uc18d\uc131 \uac12\uc744 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ucffc\ub9ac\ub97c \uc608\ub85c \ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<pre class=\"wrap:true lang:swift decode:true\"> let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Expression.property(\"type\")))\r\n        .from(DataSource.database(db))\r\n        .limit(Expression.int(limit))<\/pre>\n<ul>\n<li>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4.\n<pre><code class=\"json\">    [\r\n        {\r\n            \"type\": \"airline\"\r\n        },\r\n        {\r\n            \"type\": \"airline\"\r\n        },\r\n        {\r\n            \"type\": \"hotel\"\r\n        }\r\n    ]<\/code><\/pre>\n<p>\uc544\ub798 \ucf54\ub4dc \uc2a4\ub2c8\ud3ab\uc740 \uc704\uc758 \uacb0\uacfc\ub97c \ucc98\ub9ac\ud558\uc5ec \ucffc\ub9ac\ud55c \uc18d\uc131 \uac12\uc744 \uac00\uc838\uc624\ub294 \ubc29\ubc95\uc758 \uc608\uc2dc(Swift)\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> for row in try searchQuery.execute() {\r\n   if let docObject = row.toDictionary() as? [String:Any]  {\r\n      \/\/ You can now fetch the details of the document using the property name as key\r\n         let type = docObject[\"type\"]\r\n        }     \r\n    }<\/pre>\n<p>\uc27c\ud45c\ub85c \uad6c\ubd84\ub41c \ubaa9\ub85d\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc11c \uba54\ud0c0\ub370\uc774\ud130\uc640 \uc18d\uc131\uc744 \ub3d9\uc2dc\uc5d0 \ucffc\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>SelectResult<\/code> \uc808\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uc751\ub2f5 \ubc30\uc5f4\uc758 \uac01 \uba64\ubc84\ub294 \uc55e\uc11c \uc124\uba85\ud55c \ub300\ub85c \ud0a4-\uac12 \uc30d\uc785\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \ucffc\ub9ac\ub97c \uace0\ub824\ud558\uc2ed\uc2dc\uc624.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">let searchQuery = QueryBuilder\r\n            .select(SelectResult.expression(Meta.id),\r\n                    SelectResult.expression(Expression.property(\"type\")))\r\n            .from(DataSource.database(db))\r\n            .limit(Expression.int(limit))<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4.<\/p>\n<pre><code class=\"json\">    [\r\n        {\r\n            \"id\":\"airline_1001\",\r\n            \"type\": \"airline\"\r\n\r\n        },\r\n        {\r\n            \"id\":\"airline_900\",\r\n            \"type\": \"airline\"\r\n        },\r\n        {\r\n            \"id\":\"hotel_1001\",\r\n            \"type\": \"hotel\"\r\n        }\r\n    ]<\/code><\/pre>\n<p>\uc544\ub798 \ucf54\ub4dc \uc2a4\ub2c8\ud3ab\uc740 \uc704\uc758 \uacb0\uacfc\ub97c \ucc98\ub9ac\ud558\uc5ec \ucffc\ub9ac\ud55c \uc18d\uc131 \uac12\uc744 \uac00\uc838\uc624\ub294 \ubc29\ubc95\uc758 \uc608\uc2dc(Swift)\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> for row in try searchQuery.execute() {\r\n    if let docObject = row.toDictionary() as? [String:Any]  {\r\n    \/\/ You can now fetch the details of the document using the property name as key\r\n        let type = docObject[\"type\"]\r\n        let docId = docObject[\"id\"]\r\n     }     \r\n }<\/pre>\n<p>&nbsp;<\/p>\n<p><code class=\"swift\"><\/code><\/li>\n<\/ul>\n<h3 id=\"introducingthewhereclause\">Where \uc808 \uc18c\uac1c<\/h3>\n<p>SQL\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c <code>\uc5b4\ub514<\/code> \uc808\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucffc\ub9ac\uc758 \uc77c\ubd80\ub85c \ubc18\ud658\ud560 \ubb38\uc11c\ub97c \ud544\ud130\ub9c1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucffc\ub9ac\uc5d0\uc11c <code>\uc120\ud0dd<\/code> \ubb38\uc740 <code>\ud45c\ud604\uc2dd<\/code>. \uc6d0\ud558\ub294 \uc218\ub9cc\ud07c <code>\ud45c\ud604\uc2dd<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc815\uad50\ud55c \ud544\ud130\ub9c1 \uae30\ub2a5\uc744 \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h4 id=\"filteringdocumentsbasedonspecificproperty\">\ud2b9\uc815 \uc18d\uc131\uc744 \uae30\uc900\uc73c\ub85c \ubb38\uc11c \ud544\ud130\ub9c1<\/h4>\n<p>\uc544\ub798 \uc608\uc81c\uc5d0\uc11c\ub294 <code>\uc18d\uc131 \ud45c\ud604\uc2dd<\/code> \uc640 \ud568\uaed8 \uc785\ub825\ud569\ub2c8\ub2e4. <code>\ube44\uad50 \ud45c\ud604\uc2dd<\/code> \uc720\ud615\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud2b9\uc815 \ubb38\uc11c \uc18d\uc131\uc744 \uae30\uc900\uc73c\ub85c \ubb38\uc11c\ub97c \ud544\ud130\ub9c1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub798 \uc608\ub294 <code>equalTo<\/code> \ube44\uad50 \ud45c\ud604\uc2dd\uc785\ub2c8\ub2e4.<\/p>\n<p>\ucc38\uace0: \ud504\ub85c\ud37c\ud2f0\ub97c \ucc38\uc870\ud560 \ub54c <code>\uc18d\uc131 \ud45c\ud604\uc2dd<\/code>\uc5d0\uc11c \ud0a4 \uacbd\ub85c(\uc810\uc120 \ud45c\uae30)\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc911\ucca9\ub41c \ud504\ub85c\ud37c\ud2f0\uc758 \uacbd\ub85c\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let searchQuery = QueryBuilder\r\n        .select(SelectResult.all())\r\n        .from(DataSource.database(db))\r\n        .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\")))\r\n        .limit(Expression.int(limit))<\/pre>\n<p>\uc9c0\uc6d0\ub418\ub294 \ube44\uad50 \uc5f0\uc0b0\uc790 \ubaa9\ub85d\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<br \/>\n* \ubbf8\ub9cc<br \/>\n* notLessThan<br \/>\n* lessThanOrEqualTo<br \/>\n* notLessThanOrEqualTo<br \/>\n* \ub354 \ud070\ubcf4\ub2e4<br \/>\n* notGreaterThan<br \/>\n* greaterThanOrEqualTo<br \/>\n* notGreaterThanOrEqualTo<br \/>\n* \uac19\uc74c<br \/>\n* notEqualTo<\/p>\n<h4 id=\"filteringdocumentsusinglogicalexpressions\">\ub17c\ub9ac \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc11c \ud544\ud130\ub9c1<\/h4>\n<p>\ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>\ub17c\ub9ac \ud45c\ud604\uc2dd<\/code> \uc5ec\ub7ec \uac1c\uc758 <code>\ube44\uad50 \ud45c\ud604\uc2dd<\/code>. \uc544\ub798 \uc608\uc81c\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. <code>\uc720\ud615<\/code> \ud638\ud154 \ub204\uad6c <code>\uad6d\uac00<\/code> \uc18d\uc131\uc740 <em>\"\ubbf8\uad6d\"<\/em> \ub610\ub294 <em>\"\ud504\ub791\uc2a4\"<\/em> \uadf8\ub9ac\uace0 \ub204\uad6c\uc758 <code>\uacf5\uc11d<\/code> \uc18d\uc131\uc740 <em>true<\/em>. \uc989, \ubbf8\uad6d \ub610\ub294 \ud504\ub791\uc2a4\uc5d0 \uacf5\uc2e4\uc774 \uc788\ub294 \ubaa8\ub4e0 \ud638\ud154\uc744 \uac00\uc838\uc624\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id))\r\n        .from(DataSource.database(db))\r\n        .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\"))\r\n            .and(Expression.property(\"country\").equalTo(Expression.string (\"United States\"))\r\n            .or(Expression.property(\"country\").equalTo(Expression.string (\"France\"))))\r\n            .and(Expression.property(\"vacancy\").equalTo(Expression.boolean(true))))\r\n        .limit(Expression.int(limit))<\/pre>\n<h3 id=\"patternmatching\">\ud328\ud134 \ub9e4\uce6d<\/h3>\n<p>\uadf8\ub9ac\uace0 <code>\uac19\uc740<\/code> \uadf8\ub9ac\uace0 <code>\uc815\uaddc\uc2dd<\/code> \ud45c\ud604\uc2dd\uc744 \ubb38\uc790\uc5f4 \ub9e4\uce6d\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ud45c\ud604\uc2dd\uc740 \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud558\uc5ec \uc77c\uce58\uc2dc\ud0b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubb38\uc790\uc5f4 \uc77c\uce58\uc5d0\uc11c \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud558\uc9c0 \uc54a\uac8c \ud558\ub824\uba74 \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. <code>Function.lower<\/code> \ub610\ub294 <code>Function.upper<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc77c\uce58\ud558\ub294 \ubb38\uc790\uc5f4\uc744 \uc18c\ubb38\uc790 \ub610\ub294 \ub300\ubb38\uc790\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4.<\/p>\n<h4 id=\"exactmatch\">\uc815\ud655\ud788 \uc77c\uce58<\/h4>\n<p>\uc544\ub798 \uc608\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ucc3e\uace0 \uc788\uc2b5\ub2c8\ub2e4. <code>\uc720\ud615<\/code> \"\ub79c\ub4dc\ub9c8\ud06c\" <code>\uc774\ub984<\/code> \uc18d\uc131\uc740 \ubb38\uc790\uc5f4\uacfc \uc815\ud655\ud788 \uc77c\uce58\ud569\ub2c8\ub2e4. <em>\"\uc655\ub9bd \uc5d4\uc9c0\ub2c8\uc5b4 \ubc15\ubb3c\uad00\"<\/em>. \uc774\ud6c4 <code>\uac19\uc740<\/code> \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud558\uc5ec \uc77c\uce58\ud558\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 <code>Function.lower<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc77c\uce58\ud558\ub294 \ubb38\uc790\uc5f4\uc744 \uc18c\ubb38\uc790\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ub2e4\uc74c \ucffc\ub9ac\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ubc18\ud658\ub429\ub2c8\ub2e4. <em>\"\ub79c\ub4dc\ub9c8\ud06c\"<\/em> <code>\uc720\ud615<\/code> \ubb38\uc11c\uac00 \ud3ec\ud568\ub41c <code>\uc774\ub984<\/code> \ub9e4\uce6d <em>\"\uc655\ub9bd \uc5d4\uc9c0\ub2c8\uc5b4 \ubc15\ubb3c\uad00\"<\/em>, <em>\"\uc655\ub9bd \uc5d4\uc9c0\ub2c8\uc5b4 \ubc15\ubb3c\uad00\"<\/em>, <em>\"\uc655\ub9bd \uc5d4\uc9c0\ub2c8\uc5b4 \ubc15\ubb3c\uad00\"<\/em> \ub4f1\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"country\")),\r\n                SelectResult.expression(Expression.property(\"name\")))\r\n        .from(DataSource.database(db))\r\n        .where(Expression.property(\"type\").equalTo(Expression.string(\"landmark\"))\r\n            .and(Function.lower(Expression.property(\"name\")).like(Expression.string(\"royal engineers museum\"))))\r\n        .limit(Expression.int(limit))<\/pre>\n<h4 id=\"wildcardmatch\">\uc640\uc77c\ub4dc\uce74\ub4dc \uacbd\uae30<\/h4>\n<p>\ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>%<\/code> \uae30\ud638 \uc548\uc5d0 <code>\uac19\uc740<\/code> \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud558\uc5ec 0\uac1c \uc774\uc0c1\uc758 \ubb38\uc790\uc5d0 \ub300\ud574 \uc640\uc77c\ub4dc\uce74\ub4dc \uc77c\uce58\ub97c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc640\uc77c\ub4dc\uce74\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \uac80\uc0c9 \ubb38\uc790\uc5f4\uc5d0 \uc57d\uac04\uc758 \ubaa8\ud638\uc131\uc744 \ubd80\uc5ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798 \uc608\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ucc3e\uace0 \uc788\uc2b5\ub2c8\ub2e4. <code>\uc720\ud615<\/code> \"\ub79c\ub4dc\ub9c8\ud06c\" <code>\uc774\ub984<\/code> \uc18d\uc131\uc740 \"eng\"\ub85c \uc2dc\uc791\ud558\uc5ec 0\uc790 \uc774\uc0c1, \ubb38\uc790 \"e\"\ub85c \uc2dc\uc791\ud558\uc5ec 0\uc790 \uc774\uc0c1 \uc624\ub294 \ubaa8\ub4e0 \ubb38\uc790\uc5f4\uacfc \uc77c\uce58\ud569\ub2c8\ub2e4. \ub2e4\uc2dc \ud55c \ubc88, \uc6b0\ub9ac\ub294 <code>Function.lower<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uac80\uc0c9 \ucf00\uc774\uc2a4\uc5d0 \ubbfc\uac10\ud558\uc9c0 \uc54a\uac8c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ucffc\ub9ac\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4. <em>\"\ub79c\ub4dc\ub9c8\ud06c\"<\/em> <code>\uc720\ud615<\/code> \ubb38\uc11c\uac00 \ud3ec\ud568\ub41c <code>\uc774\ub984<\/code> \ub9e4\uce6d <em>\"\uc5d4\uc9c0\ub2c8\uc5b4\"<\/em>, <em>\"\uc5d4\uc9c4\"<\/em>, <em>\"\uc789\uae00\ub9ac\uc2dc \uc5d0\uadf8\"<\/em> , <em>\"\uc789\uae00\ub79c\ub4dc \uc774\uae00\"<\/em> \ub4f1\uc785\ub2c8\ub2e4. \uc77c\uce58\ud558\ub294 \ub2e8\uc5b4\uac00 \ub2e8\uc5b4 \uacbd\uacc4\uc5d0 \uac78\uccd0 \uc788\uc744 \uc218 \uc788\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">    let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"country\")),\r\n                SelectResult.expression(Expression.property(\"name\")))\r\n        .from(DataSource.database(db))\r\n        .where(Expression.property(\"type\").equalTo(Expression.string(\"landmark\"))\r\n            .and( Function.lower(Expression.property(\"name\")).like(Expression.string(\"%eng%r%\"))))\r\n        .limit(Expression.int(limit))<\/pre>\n<h4 id=\"wildcardcharactermatch\">\uc640\uc77c\ub4dc\uce74\ub4dc \ubb38\uc790 \ub9e4\uce58<\/h4>\n<p>\ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>\"_\"<\/code> \uae30\ud638 \uc548\uc5d0 <code>\uac19\uc740<\/code> \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub2e8\uc77c \uce90\ub9ad\ud130\uc640 \uc640\uc77c\ub4dc\uce74\ub4dc \ub9e4\uce58\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798 \uc608\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ucc3e\uace0 \uc788\uc2b5\ub2c8\ub2e4. <code>\uc720\ud615<\/code> \"\ub79c\ub4dc\ub9c8\ud06c\" <code>\uc774\ub984<\/code> \uc18d\uc131\uc740 \"eng\"\ub85c \uc2dc\uc791\ud558\uace0 \uc815\ud655\ud788 4\uac1c\uc758 \uc640\uc77c\ub4dc\uce74\ub4dc \ubb38\uc790\uac00 \ub4a4\ub530\ub974\uace0 \ubb38\uc790 \"r\"\ub85c \ub05d\ub098\ub294 \ubaa8\ub4e0 \ubb38\uc790\uc5f4\uacfc \uc77c\uce58\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc804 \uc608\uc81c\uc640 \ub2ec\ub9ac, \uc5ec\uae30\uc11c\ub294 <code>Function.lower<\/code> \ub97c \uc785\ub825\ud558\uc5ec \uac80\uc0c9 \ubb38\uc790\uc5f4\uc744 \uc18c\ubb38\uc790\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uac80\uc0c9\uc740 \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud569\ub2c8\ub2e4.<br \/>\n\ub2e4\uc74c \ucffc\ub9ac\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4. <em>\"\ub79c\ub4dc\ub9c8\ud06c\"<\/em> <code>\uc720\ud615<\/code> \ubb38\uc11c\uac00 \ud3ec\ud568\ub41c <code>\uc774\ub984<\/code> \ub9e4\uce6d <em>\"\uc5d4\uc9c0\ub2c8\uc5b4\"<\/em>, <em>\"Engineer1\"<\/em> \ub4f1\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"country\")),\r\n                SelectResult.expression(Expression.property(\"name\")))\r\n        .from(DataSource.database(db))\r\n        .where(Expression.property(\"type\").equalTo(Expression.string(\"landmark\"))\r\n            .and( Expression.property(\"name\")\r\n                .like(Expression.string(\"%Eng____r%\"))))\r\n        .limit(Expression.int(limit))<\/pre>\n<h4 id=\"regexmatch\">\uc815\uaddc\uc2dd \uc77c\uce58<\/h4>\n<p>\uadf8\ub9ac\uace0 <code>\uc815\uaddc\uc2dd<\/code> \ud45c\ud604\uc2dd\uc744 \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud558\ub294 \uc77c\uce58 \ud56d\ubaa9\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc640\uc77c\ub4dc\uce74\ub4dc\uc640 \uc720\uc0ac <code>\uac19\uc740<\/code> \ud45c\ud604\uc2dd, <code>\uc815\uaddc\uc2dd<\/code> \ud45c\ud604\uc2dd \uae30\ubc18 \ud328\ud134 \uc77c\uce58\ub97c \uc0ac\uc6a9\ud558\uba74 \uac80\uc0c9 \ubb38\uc790\uc5f4\uc5d0 \uc57d\uac04\uc758 \ubaa8\ud638\ud568\uc774 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798 \uc608\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ucc3e\uace0 \uc788\uc2b5\ub2c8\ub2e4. <code>\uc720\ud615<\/code> \"\ub79c\ub4dc\ub9c8\ud06c\" <code>\uc774\ub984<\/code> \uc18d\uc131\uc740 \"eng\"\ub85c \uc2dc\uc791\ud558\uace0 \uc815\ud655\ud788 4\uac1c\uc758 \uc640\uc77c\ub4dc\uce74\ub4dc \ubb38\uc790\uac00 \ub4a4\ub530\ub974\uace0 \ubb38\uc790 \"r\"\ub85c \ub05d\ub098\ub294 \ubaa8\ub4e0 \ubb38\uc790\uc5f4(\ub2e8\uc5b4 \uacbd\uacc4\uc5d0 \uc788\ub294)\uacfc \uc77c\uce58\ud569\ub2c8\ub2e4. \ub2e4\uc2dc \ud55c \ubc88, \uc6b0\ub9ac\ub294 <code>Function.lower<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uac80\uc0c9 \ucf00\uc774\uc2a4\uc5d0 \ubbfc\uac10\ud558\uc9c0 \uc54a\uac8c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ucffc\ub9ac\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4. <em>\"\ub79c\ub4dc\ub9c8\ud06c\"<\/em> <code>\uc720\ud615<\/code> \ubb38\uc11c\uac00 \ud3ec\ud568\ub41c <code>\uc774\ub984<\/code> \ub9e4\uce6d <em>\"\uc5d4\uc9c4\"<\/em>, <em>\"\uc5d4\uc9c4\"<\/em> \ub4f1\uc785\ub2c8\ub2e4. \ucc38\uace0 <code>\\b<\/code> \ub294 \ub2e8\uc5b4 \uacbd\uacc4\uc5d0\uc11c \uc77c\uce58 \ud56d\ubaa9\uc774 \ubc1c\uc0dd\ud558\ub3c4\ub85d \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n        SelectResult.expression(Expression.property(\"name\")) )\r\n        .from(DataSource.database(db))\r\n        .where(Expression.property(\"type\").equalTo(Expression.string(\"landmark\"))\r\n            .and(Function.lower(Expression.property(\"name\")).regex(Expression.string(\"\\\\beng.*r.*\\\\b\"))))\r\n        .limit(Expression.int(limit))<\/pre>\n<h3 id=\"documentsthathavenullormissingproperty\">\ubb34\ud6a8 \ub610\ub294 \ub204\ub77d\ub41c \uc18d\uc131\uc774 \uc788\ub294 \ubb38\uc11c<\/h3>\n<p>SQL\uacfc \ucc28\ubcc4\ud654\ub418\ub294 \ucffc\ub9ac \uc5b8\uc5b4\uc758 \ud2b9\uc9d5 \uc911 \ud558\ub098\ub294 null \ub610\ub294 \ub204\ub77d\ub41c \uc18d\uc131\uc774 \uc788\ub294 \ubb38\uc11c\ub97c \ucffc\ub9ac\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub9ac\uace0 <code>isNullOrMissing()<\/code> \ud45c\ud604\uc2dd\uc740 <code>\uc18d\uc131 \ud45c\ud604\uc2dd<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc9c0\uc815\ub41c \ud504\ub85c\ud37c\ud2f0\uc5d0 null \ub610\ub294 \ub204\ub77d\ub41c \uac12\uc774 \uc788\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud569\ub2c8\ub2e4. \ud504\ub85c\ud37c\ud2f0\uc758 <code>isNullOrMissing()<\/code> \ub294 \uadf8 \ubc18\ub300\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798 \uc608\uc81c\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubaa8\ub4e0 \ubb38\uc11c\ub97c \ucc3e\uace0 \uc788\uc2b5\ub2c8\ub2e4. <code>\uc774\uba54\uc77c<\/code> \uc18d\uc131\uc774 \uc5c6\uac70\ub098 \ub204\ub77d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"email\")))\r\n        .from(DataSource.database(db))\r\n        .where(Expression.property(\"email\").isNullOrMissing())\r\n        .limit(Expression.int(limit))<\/pre>\n<h3 id=\"orderingofdocuments\">\ubb38\uc11c \uc8fc\ubb38<\/h3>\n<p>\uc8fc\uc5b4\uc9c4 \ud45c\ud604\uc2dd \uacb0\uacfc\ub97c \uae30\uc900\uc73c\ub85c \ucffc\ub9ac \uacb0\uacfc\ub97c \uc815\ub82c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798 \uc608\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. <code>\uc720\ud615<\/code> \uc640 \uac19\uc740 <em>\"\ud638\ud154\"<\/em> \uac12\uc5d0 \ub530\ub77c \uc624\ub984\ucc28\uc21c\uc73c\ub85c \uc815\ub82c\ub429\ub2c8\ub2e4. <code>title<\/code> \uc18d\uc131\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let searchQuery = QueryBuilder.select(\r\n            SelectResult.expression(Meta.id),\r\n            SelectResult.expression(Expression.property(\"title\")))\r\n        .from(DataSource.database(db))\r\n    .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\")))\r\n        .orderBy(Ordering.property(\"title\").ascending())\r\n        .limit(Expression.int(limit))<\/pre>\n<h3 id=\"stringmanipulation\">\ubb38\uc790\uc5f4 \uc870\uc791<\/h3>\n<p>\ubb38\uc790\uc5f4 \uc870\uc791 \uae30\ub2a5\uc740 \ubaa8\ub4e0 \ub370\uc774\ud130 \ucc98\ub9ac\uc5d0 \ud544\uc218\uc801\uc778 \uc694\uc18c\uc785\ub2c8\ub2e4. \uc774\uc804 \uc608\uc81c\uc5d0\uc11c\ub294 <code>Function.lower<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubd84\ud558\uc9c0 \uc54a\ub294 \ubb38\uc790\uc5f4 \ube44\uad50\ub97c \uc704\ud574 \ubb38\uc790\uc5f4\uc744 \uc18c\ubb38\uc790\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc790\uc5f4 \ucc98\ub9ac \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"(null)\">    - Function.lower(String Expression)\r\n    - Function.ltrim(String Expression)\r\n    - Function.rtrim(String Expression)\r\n    - Function.trim(String Expression)\r\n    - Function.upper(String Expression)\r\n    - Function.length(String Expression)\r\n    - Function.substring(String Expression, String Expression)\r\n<\/code><\/pre>\n<p>\uc544\ub798 \uc608\ub294 <code>\uc774\uba54\uc77c<\/code> \uc18d\uc131\uc5d0 \ud558\uc704 \ubb38\uc790\uc5f4\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. <em>\"natgeo.org\"<\/em>. . <code>\uc774\ub984<\/code> \uc18d\uc131 \uac12\uc740 \uc751\ub2f5\uc5d0\uc11c \ub300\ubb38\uc790\ub85c \ubcc0\ud658\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">let searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"email\")),\r\n                SelectResult.expression(Expression.property(\"name\")))\r\n        .from(DataSource.database(db))\r\n .where(Function.contains(Expression.property(\"email\"), substring: Expression.string (\"natgeo.org\")))\r\n        .limit(Expression.int(limit))<\/pre>\n<p>&nbsp;<\/p>\n<h4 id=\"collation\">\ub370\uc774\ud130 \uc815\ub82c<\/h4>\n<p>\ub370\uc774\ud130 \uc815\ub82c \ud568\uc218\ub294 \uc720\ub2c8\ucf54\ub4dc \ubb38\uc790\uc5f4, \ub85c\uce98 \uc778\uc2dd \ubb38\uc790\uc5f4 \uc870\uc791 \ubc0f \ubc1c\uc74c \ubd80\ud638 \uac19\uc740 \uc5b8\uc5b4\ubcc4 \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud558\uc5ec \ubb38\uc790\uc5f4 \ube44\uad50 \ubc0f \uc815\ub82c \uae30\ub2a5\uc744 \ud5a5\uc0c1\uc2dc\ud0b5\ub2c8\ub2e4. \ub370\uc774\ud130 \uc815\ub82c\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc774 \ubb38\uc11c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbase\/couchbase-lite-core\/wiki\/JSON-Query-Schema#collation\">\uae00\uc4f0\uae30 <\/a> \uc791\uc131\uc790: Jens Alfke.<\/p>\n<p>\uc544\ub798 \uc608\uc81c\uc5d0\uc11c\ub294 \ub300\uc18c\ubb38\uc790 \ubc0f \uc545\uc13c\ud2b8\ub97c \ubb34\uc2dc\ud558\ub294 \ub370\uc774\ud130 \uc815\ub82c \uaddc\uce59\uc744 \uc815\uc758\ud569\ub2c8\ub2e4. \uc774 \ucf5c\ub808\uc774\ud130\ub294 \ubb38\uc790\uc5f4 \ube44\uad50 \ud568\uc218\uc758 <code>\uc774\ub984<\/code> \uc18d\uc131\uc744 \uac80\uc0c9\ud569\ub2c8\ub2e4. \uacb0\uacfc\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\uac00 \ud3ec\ud568\ub429\ub2c8\ub2e4. <code>\uc774\ub984<\/code> \ub294 \"\ud638\ud154 \ub178\ubcf4\ud154 \ud30c\ub9ac \ub77c \ub370\ud321\uc2a4\" , \"\ud638\ud154 \ub178\ubcf4\ud154 \ud30c\ub9ac \ub77c \ub370\ud321\uc2a4\" \ub4f1\uacfc \uac19\uc740 \ubb38\uc790\uc5f4\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">let collator = Collation.unicode()\r\n                .ignoreAccents(true)\r\n                .ignoreCase(true)\r\n\r\nlet searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n         SelectResult.expression(Expression.property(\"name\")))\r\n        .from(DataSource.database(db))\r\n     .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\"))\r\n            .and(Expression.property(\"name\").collate(collator).equalTo(Expression.string (\"Hotel novotel paris la defense\"))))\r\n        .limit(Expression.int(limit))<\/pre>\n<p>\ub370\uc774\ud130 \uc815\ub82c \uc9c0\uc6d0\uc5d0\ub294 \uba87 \uac00\uc9c0 \uc81c\ud55c \uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc744 \uc791\uc131\ud558\ub294 \uc2dc\uc810\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud328\ud134 \uc77c\uce58 \ucffc\ub9ac\uc5d0\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. <code>\uac19\uc740<\/code> \uadf8\ub9ac\uace0 <code>\uc815\uaddc\uc2dd<\/code> .<\/p>\n<h3 id=\"stringmanipulation\">\ub9e4\uac1c\ubcc0\uc218\ud654<\/h3>\n<p>\ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4\uc758 \ub354 \uac15\ub825\ud55c \uae30\ub2a5 \uc911 \ud558\ub098\ub294 \ucffc\ub9ac\uc5d0 \ub9e4\uac1c\ubcc0\uc218\ub97c \uc124\uc815\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc785\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ucffc\ub9ac\ub97c \ub2e4\uc2dc \ub9cc\ub4e4\uac70\ub098 \ub2e4\uc2dc \uc2dc\uc791\ud560 \ud544\uc694 \uc5c6\uc774 \uc5b8\uc81c\ub4e0\uc9c0 \ucffc\ub9ac\uc5d0 \ub300\ud55c \ub9e4\uac1c\ubcc0\uc218 \uac12\uc744 \uc720\uc5f0\ud558\uac8c \uc5c5\ub370\uc774\ud2b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucffc\ub9ac \ub9e4\uac1c\ubcc0\uc218\ub97c \ubcc0\uacbd\ud558\uba74 \ucffc\ub9ac\uac00 \uc790\ub3d9\uc73c\ub85c \ub2e4\uc2dc \uc2dc\uc791\ub418\uace0 \uc0c8 \ub9e4\uac1c\ubcc0\uc218\uac00 \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc704\uc758 \ub370\uc774\ud130 \ubaa8\ub378\uc744 \ucc38\uc870\ud558\uc5ec \uc22b\uc790\u00a0<code>\uacf5\uac1c \uc88b\uc544\uc694<\/code>\u00a0\uac00 \ud2b9\uc815 \ubc94\uc704 \ub0b4\uc5d0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc544\ub798 \uc608\uc5d0\uc11c\ub294 \"\ud638\ud154\"\uc744 \ucc3e\uace0 \uc788\uc2b5\ub2c8\ub2e4. <code>\uc720\ud615<\/code>\u00a0\ubb38\uc11c\uc5d0\uc11c <code>\uacf5\uac1c \uc88b\uc544\uc694<\/code>\u00a0\ub294 5\uc5d0\uc11c 10 \uc0ac\uc774\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">  \/\/ 1. function that corresponds to the number of elements in an array\r\n  let likesCount = ArrayFunction.length(Expression.property(\"public_likes\"))\r\n \/\/ 2. Parameters for specifying lower and upper limits of range\r\n let lowerCount = Expression.parameter(\"lower\")\r\n let upperCount = Expression.parameter(\"upper\")\r\n  \r\n \/\/ 3. Query that takes in parameters\r\n let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"name\")),\r\n                SelectResult.expression(likesCount).as(\"NumLikes\")\r\n        )\r\n        .from(DataSource.database(db))\r\n        .where(Expression.property(\"type\").equalTo(Expression.string (\"hotel\"))\r\n            .and(likesCount.between(lowerCount,and: upperCount)))\r\n        .limit(Expression.int(limit))\r\n\r\n   \/\/ 4. Supplying the query parameter values\r\n   let params = Parameters.init().setInt(5, forName: \"lower\").setInt(10, forName: \"upper\")\r\n    searchQuery.parameters = params<\/pre>\n<p>\uc704\uc758 \uc608\uc81c\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud588\uc74c\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>\ubc30\uc5f4 \ud568\uc218<\/code>. \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub77c\uc774\ud2b8 2.0\uc740 \uad11\ubc94\uc704\ud55c \ubc30\uc5f4 \uc870\uc791 \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\uc5d0 \ub300\ud574\uc11c\ub294 \ud5a5\ud6c4 \uc774 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/querying-array-collections-couchbase-mobile\/\">\uceec\ub809\uc158\uc5d0 \ub300\ud55c \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc744 \ucc38\uc870\ud558\uc138\uc694.<\/a><\/p>\n<h3 id=\"whatnext\">\ub2e4\uc74c \ub2e8\uacc4<\/h3>\n<p>\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Couchbase Lite 2.0\uc5d0\uc11c \uc9c0\uc6d0\ub418\ub294 \uac15\ub825\ud55c \uc0c8 \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubd24\uc2b5\ub2c8\ub2e4. Couchbase Mobile 2.0 \uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \ube4c\ub4dc\ub294 \ub2e4\uc74c\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html\">\ub2e4\uc6b4\ub85c\ub4dc<\/a> \ud398\uc774\uc9c0\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 \uad00\uc2ec\uc744 \uac00\uc9c8 \ub9cc\ud55c \ub2e4\ub978 Couchbase \ubaa8\ubc14\uc77c \ucffc\ub9ac \uad00\ub828 \uac8c\uc2dc\ubb3c\uc785\ub2c8\ub2e4.<br \/>\n- \uc774 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/full-text-search-couchbase-mobile-2-0\/\">\ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c<\/a> \uc5d0\uc11c \uc804\uccb4 \ud14d\uc2a4\ud2b8 \uac80\uc0c9 \uae30\ub2a5\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4.<br \/>\n- \uc774 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/querying-array-collections-couchbase-mobile\/\">\ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c<\/a> \ubc30\uc5f4 \uceec\ub809\uc158\uc744 \ucffc\ub9ac\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4.<br \/>\n- \uc774 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/join-queries-couchbase-mobile\/\">\ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c<\/a> \uc870\uc778 \ucffc\ub9ac\ub97c \uc218\ud589\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc9c8\ubb38\uc774\ub098 \ud53c\ub4dc\ubc31\uc774 \uc788\uc73c\uba74 \uc544\ub798\uc5d0 \ub313\uae00\uc744 \ub0a8\uae30\uac70\ub098 \ud2b8\uc704\ud130\ub85c \uc5b8\uc81c\ub4e0\uc9c0 \ubb38\uc758\ud574 \uc8fc\uc138\uc694.\u00a0<a href=\"https:\/\/twitter.com\/rajagp\">@rajagp<\/a>\u00a0\ub610\ub294 \uc774\uba54\uc77c\uc744 \ubcf4\ub0b4\uc8fc\uc138\uc694.\u00a0<a href=\"mailto:priya.rajagopal@couchbase.com\">priya.rajagopal@couchbase.com<\/a>.  .\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/ko\/forums\/\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud3ec\ub7fc<\/a> \ub97c \ud1b5\ud574 \uc9c8\ubb38\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>The Couchbase Lite 2.0 Release, brings a plethora of new features and enhancements. We discussed one such enhancement, namely the new replication protocol between in an earlier blog post on Replication 2.0. In this blog post, we will introduce you [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":4188,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,7667,1810,2165,1812],"tags":[1393,2087,1505,1261,1743],"ppma_author":[8948],"class_list":["post-4187","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-lite","category-couchbase-mobile","category-full-text-search","category-n1ql-query","tag-api","tag-couchbase-mobile-2","tag-index","tag-json","tag-sqlite"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introducing the Query Interface in Couchbase Mobile 2.0<\/title>\n<meta name=\"description\" content=\"Couchbase Mobile 2.0 supports a new query interface based on N1QL, Couchbase\u2019s declarative query language that extends SQL for JSON.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/sql-for-json-query-interface-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing the Query Interface in Couchbase Mobile 2.0\" \/>\n<meta property=\"og:description\" content=\"Couchbase Mobile 2.0 supports a new query interface based on N1QL, Couchbase\u2019s declarative query language that extends SQL for JSON.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/sql-for-json-query-interface-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-11-14T19:00:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:28:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1716\" \/>\n\t<meta property=\"og:image:height\" content=\"842\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rajagp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Introducing the Query Interface in Couchbase Mobile 2.0\",\"datePublished\":\"2017-11-14T19:00:49+00:00\",\"dateModified\":\"2025-06-14T03:28:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/\"},\"wordCount\":2179,\"commentCount\":8,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\",\"keywords\":[\"API\",\"Couchbase Mobile 2.\",\"Index\",\"JSON\",\"sqlite\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Lite\",\"Couchbase Mobile\",\"Full-Text Search\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/\",\"name\":\"Introducing the Query Interface in Couchbase Mobile 2.0\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\",\"datePublished\":\"2017-11-14T19:00:49+00:00\",\"dateModified\":\"2025-06-14T03:28:08+00:00\",\"description\":\"Couchbase Mobile 2.0 supports a new query interface based on N1QL, Couchbase\u2019s declarative query language that extends SQL for JSON.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\",\"width\":1716,\"height\":842,\"caption\":\"SQL for JSON Query\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing the Query Interface in Couchbase Mobile 2.0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\",\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"caption\":\"Priya Rajagopal, Senior Director, Product Management\"},\"description\":\"Priya Rajagopal is a Senior Director of Product Management at Couchbase responsible for developer platforms for the cloud and the edge. She has been professionally developing software for over 20 years in several technical and product leadership positions, with 10+ years focused on mobile technologies. As a TISPAN IPTV standards delegate, she was a key contributor to the IPTV standards specifications. She has 22 patents in the areas of networking and platform security.\",\"sameAs\":[\"https:\/\/x.com\/rajagp\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c 2.0\uc758 \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4 \uc18c\uac1c","description":"Couchbase Mobile 2.0 supports a new query interface based on N1QL, Couchbase\u2019s declarative query language that extends SQL for JSON.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/sql-for-json-query-interface-couchbase-mobile\/","og_locale":"ko_KR","og_type":"article","og_title":"Introducing the Query Interface in Couchbase Mobile 2.0","og_description":"Couchbase Mobile 2.0 supports a new query interface based on N1QL, Couchbase\u2019s declarative query language that extends SQL for JSON.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/sql-for-json-query-interface-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-11-14T19:00:49+00:00","article_modified_time":"2025-06-14T03:28:08+00:00","og_image":[{"width":1716,"height":842,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","type":"image\/png"}],"author":"Priya Rajagopal, Senior Director, Product Management","twitter_card":"summary_large_image","twitter_creator":"@rajagp","twitter_misc":{"Written by":"Priya Rajagopal, Senior Director, Product Management","Est. reading time":"13\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Introducing the Query Interface in Couchbase Mobile 2.0","datePublished":"2017-11-14T19:00:49+00:00","dateModified":"2025-06-14T03:28:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/"},"wordCount":2179,"commentCount":8,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","keywords":["API","Couchbase Mobile 2.","Index","JSON","sqlite"],"articleSection":["Best Practices and Tutorials","Couchbase Lite","Couchbase Mobile","Full-Text Search","SQL++ \/ N1QL Query"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubaa8\ubc14\uc77c 2.0\uc758 \ucffc\ub9ac \uc778\ud130\ud398\uc774\uc2a4 \uc18c\uac1c","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","datePublished":"2017-11-14T19:00:49+00:00","dateModified":"2025-06-14T03:28:08+00:00","description":"Couchbase Mobile 2.0 supports a new query interface based on N1QL, Couchbase\u2019s declarative query language that extends SQL for JSON.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","width":1716,"height":842,"caption":"SQL for JSON Query"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing the Query Interface in Couchbase Mobile 2.0"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c","name":"\ud504\ub9ac\uc57c \ub77c\uc790\uace0\ud314, \uc81c\ud488 \uad00\ub9ac \ubd80\ubb38 \uc120\uc784 \uc774\uc0ac","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734","url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","caption":"Priya Rajagopal, Senior Director, Product Management"},"description":"\ud504\ub9ac\uc57c \ub77c\uc790\uace0\ud314\uc740 \ud074\ub77c\uc6b0\ub4dc \ubc0f \uc5e3\uc9c0\uc6a9 \uac1c\ubc1c\uc790 \ud50c\ub7ab\ud3fc\uc744 \ub2f4\ub2f9\ud558\ub294 Couchbase\uc758 \uc81c\ud488 \uad00\ub9ac \uc218\uc11d \uc774\uc0ac\uc785\ub2c8\ub2e4. \uadf8\ub140\ub294 20\ub144 \uc774\uc0c1 \uc5ec\ub7ec \uae30\uc220 \ubc0f \uc81c\ud488 \ub9ac\ub354\uc2ed \uc9c1\ucc45\uc744 \ub9e1\uc73c\uba70 \uc804\ubb38\uc801\uc73c\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uac1c\ubc1c\ud574 \uc654\uc73c\uba70, \uadf8\uc911 10\ub144 \uc774\uc0c1\uc740 \ubaa8\ubc14\uc77c \uae30\uc220\uc5d0 \uc9d1\uc911\ud588\uc2b5\ub2c8\ub2e4. TISPAN IPTV \ud45c\uc900 \ub300\ud45c\ub85c\uc11c IPTV \ud45c\uc900 \uc0ac\uc591\uc5d0 \ud575\uc2ec\uc801\uc778 \uae30\uc5ec\ub97c \ud588\uc2b5\ub2c8\ub2e4. \ub124\ud2b8\uc6cc\ud0b9 \ubc0f \ud50c\ub7ab\ud3fc \ubcf4\uc548 \ubd84\uc57c\uc5d0\uc11c 22\uac1c\uc758 \ud2b9\ud5c8\ub97c \ubcf4\uc720\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/priya-rajagopalcouchbase-com\/"}]}},"authors":[{"term_id":8948,"user_id":1423,"is_guest":0,"slug":"priya-rajagopalcouchbase-com","display_name":"Priya Rajagopal, Senior Director, Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","first_name":"Priya","last_name":"Rajagopal, Senior Director, Product Management","user_url":"","author_category":"","description":"\ud504\ub9ac\uc57c \ub77c\uc790\uace0\ud314\uc740 \ud074\ub77c\uc6b0\ub4dc \ubc0f \uc5e3\uc9c0\uc6a9 \uac1c\ubc1c\uc790 \ud50c\ub7ab\ud3fc\uc744 \ub2f4\ub2f9\ud558\ub294 Couchbase\uc758 \uc81c\ud488 \uad00\ub9ac \uc218\uc11d \uc774\uc0ac\uc785\ub2c8\ub2e4. \uadf8\ub140\ub294 20\ub144 \uc774\uc0c1 \uc5ec\ub7ec \uae30\uc220 \ubc0f \uc81c\ud488 \ub9ac\ub354\uc2ed \uc9c1\ucc45\uc744 \ub9e1\uc73c\uba70 \uc804\ubb38\uc801\uc73c\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uac1c\ubc1c\ud574 \uc654\uc73c\uba70, \uadf8\uc911 10\ub144 \uc774\uc0c1\uc740 \ubaa8\ubc14\uc77c \uae30\uc220\uc5d0 \uc9d1\uc911\ud588\uc2b5\ub2c8\ub2e4. TISPAN IPTV \ud45c\uc900 \ub300\ud45c\ub85c\uc11c IPTV \ud45c\uc900 \uc0ac\uc591\uc5d0 \ud575\uc2ec\uc801\uc778 \uae30\uc5ec\ub97c \ud588\uc2b5\ub2c8\ub2e4. \ub124\ud2b8\uc6cc\ud0b9 \ubc0f \ud50c\ub7ab\ud3fc \ubcf4\uc548 \ubd84\uc57c\uc5d0\uc11c 22\uac1c\uc758 \ud2b9\ud5c8\ub97c \ubcf4\uc720\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/4187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=4187"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/4187\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/4188"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=4187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=4187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=4187"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=4187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}