{"id":3737,"date":"2017-07-18T12:37:02","date_gmt":"2017-07-18T19:37:02","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3737"},"modified":"2017-07-18T12:37:02","modified_gmt":"2017-07-18T19:37:02","slug":"querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/","title":{"rendered":"Querying Date Ranges within Embedded JSON Document Arrays.  A Simple Example Using N1QL, Nodejs and Docker"},"content":{"rendered":"<p>Querying and indexing document arrays is one of the most powerful features of Couchbase. \u00a0Finding array entries within a specific date range is a common requirement. \u00a0Consider the following use case.<\/p>\n<p><strong>User Story:<\/strong> &#8220;I want to index an embedded account history array within documents in my database so that I can perform a range query\u00a0for\u00a0array entries within a specific date range.&#8221;<\/p>\n<p>Consider the following json\u00a0structure:<\/p>\n<pre class=\"\">{ \r\n \"name\":\"\", \r\n \"username\":\"\", \r\n \"email\":\"\", \r\n \"address\":{ \r\n \"streetA\":\"\", \r\n \"streetC\":\"\", \r\n \"streetD\":\"\", \r\n \"city\":\"\", \r\n \"state\":\"\", \r\n \"country\":\"\", \r\n \"zipcode\":\"\" \r\n \"geo\": {\r\n \"lat\":\"\", \r\n \"lng\":\"\" \r\n }\r\n },\r\n \"phone\":\"\", \r\n \"website\":\"\", \r\n \"company\": {\r\n \"name\":\"\", \r\n \"catchPhrase\":\"\", \r\n \"bs\":\"\" \r\n },\r\n \"posts\": [\r\n {\r\n \"words\":\"\", \r\n \"sentence\":\"\", \r\n \"sentences\":\"\", \r\n \"paragraph\":\"\" \r\n },...\r\n ],\r\n \"accountHistory\": [\r\n {\r\n \"amount\":\"\", \r\n \"date\":\"\", \r\n \"business\":\"\", \r\n \"name\":\"\", \r\n \"type\":\"\", \r\n \"account\":\"\" \r\n },...\r\n ]\r\n}<\/pre>\n<p class=\"\">I have an array called <strong>accountHistory<\/strong>\u00a0that could include 0-N number of entries. \u00a0 If I want to query a certain date range, I can easily do this by defining a secondary index on the <strong>date<\/strong> field.<\/p>\n<pre class=\"\">CREATE INDEX date_range ON\r\n default(DISTINCT ARRAY v.date FOR v IN accountHistory END)<\/pre>\n<p class=\"\">I&#8217;ve created a unique index entry by using\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/indexing-arrays.html\"><strong>DISTINCT<\/strong><\/a>\u00a0for each <strong>date<\/strong> field in each accountHistory entry. \u00a0 This means every document in the cluster that has an array of <strong>accountHistory<\/strong> entries will be included in my index as long as the accountHistory entry\u00a0has\u00a0a field called &#8220;<strong>date<\/strong>&#8220;. \u00a0It&#8217;s possible I could have multiple types of items in the accountHistory array and I only want items that have a date field to be included. \u00a0If there&#8217;s no date field, the indexer will not include that entry\u00a0in the index. \u00a0Now I can include date ranges in my query predicate:<\/p>\n<pre class=\"\">SELECT default.email, v.account, v.type, v.amount, v.name, v.email\r\n FROM default\r\n UNNEST accountHistory v\r\nWHERE v.date BETWEEN '2016-02-01T00:00:00.000Z' AND '2017-06-01T00:00:00.000Z'<\/pre>\n<p class=\"\">I&#8217;ve used one of my other favorite features of N1QL in the\u00a0query:\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/from.html#story-h2-5\"><strong>UNNEST<\/strong><\/a>. \u00a0 It allows me to shape the JSON and include root document level fields back in my results. \u00a0 In my query each entry returned back will include the account history information that is within the date range of\u00a0my predicate. \u00a0I also want the email address from the document it came from to also be included, and I don&#8217;t want to have to write additional JSON parsing logic to peel that out in my application. \u00a0 That is the power of using unnest. \u00a0The query returns the following:<\/p>\n<pre class=\"\">\"results\": [\r\n {\r\n \"account\": \"68475391\",\r\n \"amount\": \"416.37\",\r\n \"date\": \"2016-02-01T00:00:00.000Z\",\r\n \"email\": \"Emmanuel.Labadie72@gmail.com\",\r\n \"name\": \"Credit Card Account 0008\",\r\n \"type\": \"invoice\"\r\n },...<\/pre>\n<p class=\"\"><strong>Try It Out:<\/strong>\u00a0Docker is my favorite way\u00a0to spin up a development environment. \u00a0 An easy to use repo for the above examples is on github: <a href=\"https:\/\/github.com\/ToddGreenstein\/n1ql-query-nodejs\">n1ql-query-nodejs <\/a>. \u00a0It uses\u00a0docker-compose to build\u00a0two services:<\/p>\n<ol>\n<li>A single node Couchbase cluster service.<\/li>\n<li>A nodejs service to\u00a0provision the Couchbase cluster with 250,000 user profiles and indexes for several examples, including date range queries for document arrays.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Querying and indexing document arrays is one of the most powerful features of Couchbase. \u00a0Finding array entries within a specific date range is a common requirement. \u00a0Consider the following use case. User Story: &#8220;I want to index an embedded account [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1822,1812],"tags":[2012,1519],"ppma_author":[9019],"class_list":["post-3737","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-node-js","category-n1ql-query","tag-array-indexing","tag-docker"],"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>Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker - The Couchbase Blog<\/title>\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\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker\" \/>\n<meta property=\"og:description\" content=\"Querying and indexing document arrays is one of the most powerful features of Couchbase. \u00a0Finding array entries within a specific date range is a common requirement. \u00a0Consider the following use case. User Story: &#8220;I want to index an embedded account [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-07-18T19:37:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Todd Greenstein\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@todd_greenstein\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Todd Greenstein\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/\"},\"author\":{\"name\":\"Todd Greenstein\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/64b5d1e5969768c5d63c11c696951ed3\"},\"headline\":\"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker\",\"datePublished\":\"2017-07-18T19:37:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/\"},\"wordCount\":390,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Array Indexing\",\"docker\"],\"articleSection\":[\"Node.js\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/\",\"name\":\"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-07-18T19:37:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#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\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker\"}]},{\"@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\/64b5d1e5969768c5d63c11c696951ed3\",\"name\":\"Todd Greenstein\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/abfbe093983052aa28595343c19888ce\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g\",\"caption\":\"Todd Greenstein\"},\"description\":\"Todd Greenstein is a Solution Architect at Couchbase. Todd is specialize in API design, architecture, data modeling, nodejs and golang development.\",\"sameAs\":[\"https:\/\/x.com\/todd_greenstein\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/todd-greenstein\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker - The Couchbase Blog","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\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/","og_locale":"en_US","og_type":"article","og_title":"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker","og_description":"Querying and indexing document arrays is one of the most powerful features of Couchbase. \u00a0Finding array entries within a specific date range is a common requirement. \u00a0Consider the following use case. User Story: &#8220;I want to index an embedded account [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-07-18T19:37:02+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Todd Greenstein","twitter_card":"summary_large_image","twitter_creator":"@todd_greenstein","twitter_misc":{"Written by":"Todd Greenstein","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/"},"author":{"name":"Todd Greenstein","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/64b5d1e5969768c5d63c11c696951ed3"},"headline":"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker","datePublished":"2017-07-18T19:37:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/"},"wordCount":390,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Array Indexing","docker"],"articleSection":["Node.js","SQL++ \/ N1QL Query"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/","url":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/","name":"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-07-18T19:37:02+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#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\/querying-date-ranges-within-embedded-json-document-arrays-simple-example-using-n1ql-nodejs-docker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Querying Date Ranges within Embedded JSON Document Arrays. A Simple Example Using N1QL, Nodejs and Docker"}]},{"@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\/64b5d1e5969768c5d63c11c696951ed3","name":"Todd Greenstein","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/abfbe093983052aa28595343c19888ce","url":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g","caption":"Todd Greenstein"},"description":"Todd Greenstein is a Solution Architect at Couchbase. Todd is specialize in API design, architecture, data modeling, nodejs and golang development.","sameAs":["https:\/\/x.com\/todd_greenstein"],"url":"https:\/\/www.couchbase.com\/blog\/author\/todd-greenstein\/"}]}},"authors":[{"term_id":9019,"user_id":20,"is_guest":0,"slug":"todd-greenstein","display_name":"Todd Greenstein","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g","author_category":"","last_name":"Greenstein","first_name":"Todd","job_title":"","user_url":"","description":"Todd Greenstein is a Solution Architect at Couchbase. Todd is  specialize in API design, architecture, data modeling, nodejs and golang development."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3737","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\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=3737"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3737\/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=3737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=3737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=3737"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=3737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}