{"id":3867,"date":"2017-07-27T07:00:18","date_gmt":"2017-07-27T14:00:18","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3867"},"modified":"2025-06-13T20:15:16","modified_gmt":"2025-06-14T03:15:16","slug":"defining-scan-consistency-node-js-couchbase-application","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/","title":{"rendered":"Defining Scan Consistency in a Node.js with Couchbase Application"},"content":{"rendered":"<p>Have you ever created an application where you needed to save a document into <a href=\"https:\/\/www.couchbase.com\" target=\"_blank\" rel=\"noopener\">Couchbase<\/a> and then immediately query for that created document? It happens to me all the time when I&#8217;m developing. Take for example, adding new data into a list where each list item is a new document. In many scenarios you&#8217;ll want to update the UI that renders the list immediately after adding to it. The problem here is that the document you had just created may not show up in the query results. This is because the Couchbase indexers may not have processed the latest mutations against the Couchbase Bucket.<\/p>\n<p>We&#8217;re going to see how to define our own scan consistency within a Node.js application which will yield variable results in our Couchbase N1QL queries.<\/p>\n<p><!--more--><\/p>\n<p>Defining the scan consistency in an application will be similar regardless of the programming technology used. For this particular example we&#8217;ll be <a href=\"https:\/\/www.couchbase.com\/blog\/build-a-rest-api-with-node-js-express-and-couchbase\/\">using Node.js<\/a> with both N1QL and <a href=\"https:\/\/ottomanjs.com\/\" target=\"_blank\" rel=\"noopener\">Ottoman.js<\/a>.<\/p>\n<p>Before going forward, the assumption is that you&#8217;ve got Couchbase installed and configured for N1QL. This means that you have at least one index ready to go, even if it is a\u00a0primary index.<\/p>\n<h2>Defining the Scan Consistency with N1QL Queries<\/h2>\n<p>The first thing we&#8217;re going to worry about is N1QL related queries. Take a look at the following snippet of Node.js JavaScript code:<\/p>\n<pre class=\"lang:default decode:true \">app.get(\"\/endpoint\", function(request, response) {\r\n    var statement = N1qlQuery.fromString(\"SELECT META().id, `\" + bucket._name + \"`.* FROM `\" + bucket._name + \"`\");\r\n    bucket.query(statement, function(error, result) {\r\n        if(error) {\r\n            return response.status(500).send(error);\r\n        }\r\n        response.send(result);\r\n    });\r\n});<\/pre>\n<p>By default, the <code>SELECT<\/code> query is unbounded. This means that the query will return only data that is currently indexed, yielding the fastest possible response. Remember, if our new data hasn&#8217;t been indexed, it won&#8217;t be returned in the results.<\/p>\n<p>If we wanted to wait until our data was indexed, we can define our scan consistency by doing the following:<\/p>\n<pre class=\"lang:default decode:true \">var statement = N1qlQuery.fromString(\"SELECT META().id, `\" + bucket._name + \"`.* FROM `\" + bucket._name + \"`\");\r\nstatement.consistency(N1qlQuery.Consistency.REQUEST_PLUS);<\/pre>\n<p>Notice that we&#8217;ve changed the consistency in the above snippet to\u00a0<code>REQUEST_PLUS<\/code> rather than leaving it unbounded. This means that the query won&#8217;t execute until all the mutations in the Bucket have been processed.<\/p>\n<p>So what if we&#8217;re not using N1QL, but Ottoman.js instead?<\/p>\n<h2>Defining the Scan Consistency with Ottoman.js<\/h2>\n<p>Ottoman is a little different, but the rules still apply because when using the <code>find<\/code> operator, N1QL is being used under the covers.<\/p>\n<p>Take a look at the following JavaScript snippet:<\/p>\n<pre class=\"lang:default decode:true \">app.get(\"\/endpoint\", function(request, response) {\r\n    Person.find({}, function(error, result) {\r\n        if(error) {\r\n            return response.status(500).send(error);\r\n        }\r\n        response.send(result);\r\n    });\r\n});<\/pre>\n<p>The goal here is to accomplish the same thing we had seen previously. In the above, we are doing an unbounded query and will only receive results that were processed by the index.<\/p>\n<p>This can easily be changed by the following:<\/p>\n<pre class=\"lang:default decode:true \">app.get(\"\/endpoint\", function(request, response) {\r\n    Person.find({}, { consistency: Ottoman.Consistency.LOCAL }, function(error, result) {\r\n        if(error) {\r\n            return response.status(500).send(error);\r\n        }\r\n        response.send(result);\r\n    });\r\n});<\/pre>\n<p>In the above code, <code>LOCAL<\/code> consistency is the same as saying <code>REQUEST_PLUS<\/code>.<\/p>\n<p>Not so bad right?<\/p>\n<h2>Conclusion<\/h2>\n<p>You just saw how to define your own scan consistency in Couchbase using Node.js and either N1QL or Ottoman. By default queries are performance first, but should you need to make adjustments, at least it is available to you as an option.<\/p>\n<p>If you&#8217;d like to learn more about scan consistency and the available options, check out the <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/architecture\/querying-data-with-n1ql.html\" target=\"_blank\" rel=\"noopener\">Couchbase documentation<\/a> on the subject.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Have you ever created an application where you needed to save a document into Couchbase and then immediately query for that created document? It happens to me all the time when I&#8217;m developing. Take for example, adding new data into [&hellip;]<\/p>\n","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1816,9327,1822],"tags":[1543,2015],"ppma_author":[9032],"class_list":["post-3867","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","category-javascript","category-node-js","tag-javascript","tag-scan-consistency"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Defining Scan Consistency in a Node.js with Couchbase Application<\/title>\n<meta name=\"description\" content=\"Learn how to define your own query scan consistency in a Couchbase Node.js application that uses both N1QL and Ottoman.js.\" \/>\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\/defining-scan-consistency-node-js-couchbase-application\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Defining Scan Consistency in a Node.js with Couchbase Application\" \/>\n<meta property=\"og:description\" content=\"Learn how to define your own query scan consistency in a Couchbase Node.js application that uses both N1QL and Ottoman.js.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2017-07-27T14:00:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:15:16+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Defining Scan Consistency in a Node.js with Couchbase Application\",\"datePublished\":\"2017-07-27T14:00:18+00:00\",\"dateModified\":\"2025-06-14T03:15:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/\"},\"wordCount\":516,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"javascript\",\"scan consistency\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\",\"JavaScript\",\"Node.js\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/\",\"name\":\"Defining Scan Consistency in a Node.js with Couchbase Application\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-07-27T14:00:18+00:00\",\"dateModified\":\"2025-06-14T03:15:16+00:00\",\"description\":\"Learn how to define your own query scan consistency in a Couchbase Node.js application that uses both N1QL and Ottoman.js.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Defining Scan Consistency in a Node.js with Couchbase Application\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Defining Scan Consistency in a Node.js with Couchbase Application","description":"Learn how to define your own query scan consistency in a Couchbase Node.js application that uses both N1QL and Ottoman.js.","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\/defining-scan-consistency-node-js-couchbase-application\/","og_locale":"en_US","og_type":"article","og_title":"Defining Scan Consistency in a Node.js with Couchbase Application","og_description":"Learn how to define your own query scan consistency in a Couchbase Node.js application that uses both N1QL and Ottoman.js.","og_url":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2017-07-27T14:00:18+00:00","article_modified_time":"2025-06-14T03:15:16+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Defining Scan Consistency in a Node.js with Couchbase Application","datePublished":"2017-07-27T14:00:18+00:00","dateModified":"2025-06-14T03:15:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/"},"wordCount":516,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["javascript","scan consistency"],"articleSection":["Best Practices and Tutorials","Couchbase Server","JavaScript","Node.js"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/","url":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/","name":"Defining Scan Consistency in a Node.js with Couchbase Application","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-07-27T14:00:18+00:00","dateModified":"2025-06-14T03:15:16+00:00","description":"Learn how to define your own query scan consistency in a Couchbase Node.js application that uses both N1QL and Ottoman.js.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/defining-scan-consistency-node-js-couchbase-application\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Defining Scan Consistency in a Node.js with Couchbase Application"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, Developer Advocate, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=3867"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3867\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=3867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=3867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=3867"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=3867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}