{"id":2214,"date":"2016-04-07T01:59:43","date_gmt":"2016-04-07T01:59:42","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2214"},"modified":"2023-03-21T15:53:18","modified_gmt":"2023-03-21T22:53:18","slug":"detecting-expirations-of-documents-with-couchbase-server-and-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/","title":{"rendered":"Detecting Expirations Before They Happen with Couchbase Server &amp; N1QL"},"content":{"rendered":"<table border=\"0\" cellspacing=\"1\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td>There are many use cases where auto expiry of documents work perfectly. Maintaining session state, shopping carts, price quotes for travel and more. In all these cases, applications using Couchbase Server, set the expiry time to seconds, minutes or hours to manage user behavior.<\/p>\n<p>For items with expiry in the database, Couchbase Server has built in intelligence to make the data disappear at the given expiry time. You can find all about\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/how-to-manage-ttl-with-couchbase-n1ql\/\">TTL<\/a> and expirtaion here in Couchbase Server documentation.<\/p>\n<p>The majority of these systems with expiration also come with use cases where you want to either renew expiring data, or notify a downstream system that a set of documents are about to expire. Renewal or notifications of expiring data typically involves a process looking at upcoming expirations of documents. Querying this information just got much faster with the addition of global indexes and N1QL.<\/td>\n<td style=\"width: 233px\">\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/april\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/clock-expired-time-300x253.jpg\" width=\"193\" height=\"162\" \/><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In th past, you could index this information in map\/reduce views. Even though map\/reduce views can provide powerful indexing, due to scatter gather, global indexes hold an\u00a0advantage.<\/p>\n<p style=\"margin-left: 40px\"><em>Here is why: Global indexes partition independently from data. For example, even though you may have your data spread to 20 nodes, global indexes can reside on a single node if the index fits into that single node. You also don&#8217;t have to pick the same HW for the index vs data nodes in Couchbase Server. That means you can get an index node that can be &#8220;tall&#8221; enough to fit the index. You can read more about the differences between map\/reduce views and global secondary indexes <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/architecture\/gsi-versus-views.html\">here<\/a>.<\/em><\/p>\n<p>Here is how you index and query the expiration information to detect data that is expiring: I&#8217;ll be using .Net in the samples.<\/p>\n<p><strong>Step 1- <\/strong>Include the expiration in the document body: you won&#8217;t need to do this in future but today, META() does not expose the expiration yet. In the code below add an exp_datetime attribute to JSON that calculates the rough time when the document would expire. (Remember this is a distributed system and there is no central time. Clocks will be slightly off across your client and server nodes so the exact time of expiry is hard to detect)<\/p>\n<pre><code class=\"language-cs\">...\r\ncbDoc = new Document\r\n{\r\n  Id = _key,\r\n  Content = new\r\n  {\r\n    a1 = _a1,\r\n    ...\r\n    exp_datetime = DateTime.UtcNow.AddMilliseconds(30000)\r\n  }\r\n};\r\n\r\n\/\/UPSERT\r\ncbDoc.Expiry = 30000;\r\nvar upsert = cbBucket.Upsert(cbDoc);\r\n...<\/code><\/pre>\n<p><strong>Step 2 &#8211; <\/strong>Create an index on expiration time.<\/p>\n<pre><code class=\"language-sql\">CREATE INDEX iExpiration ON default(exp_datetime) USING GSI;<\/code><\/pre>\n<p><strong>Step 3 &#8211;<\/strong> Query data expiring in the next 30 seconds. The following query will return the document IDs and full document values.<\/p>\n<pre><code class=\"language-sql\">SELECT META(default).id, *\r\nFROM default \r\nWHERE DATE_DIFF_STR(STR_TO_UTC(exp_datetime),MILLIS_TO_UTC(DATE_ADD_MILLIS(NOW_MILLIS(),30,\"second\")),\"second\") &lt; 30 \r\n  AND STR_TO_UTC(exp_datetime) IS NOT MISSING;<\/code><\/pre>\n<p>The output will contain all the documents expiring in the next 30 seconds.<\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/april\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/untitled4.jpg\" \/><\/p>\n<p>Happy Hacking<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There are many use cases where auto expiry of documents work perfectly. Maintaining session state, shopping carts, price quotes for travel and more. In all these cases, applications using Couchbase Server, set the expiry time to seconds, minutes or hours [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1812],"tags":[],"ppma_author":[8978],"class_list":["post-2214","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-n1ql-query"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Detect Expiry Before it Happen with Couchbase Server &amp; N1QL<\/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\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Detecting Expirations Before They Happen with Couchbase Server &amp; N1QL\" \/>\n<meta property=\"og:description\" content=\"There are many use cases where auto expiry of documents work perfectly. Maintaining session state, shopping carts, price quotes for travel and more. In all these cases, applications using Couchbase Server, set the expiry time to seconds, minutes or hours [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-07T01:59:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-21T22:53:18+00:00\" \/>\n<meta name=\"author\" content=\"Cihan Biyikoglu, Director of Product Management, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Cihan Biyikoglu, Director of Product Management, 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\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/\"},\"author\":{\"name\":\"Cihan Biyikoglu, Director of Product Management, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3d8c60500ca29254fcdb2f76f29fb088\"},\"headline\":\"Detecting Expirations Before They Happen with Couchbase Server &amp; N1QL\",\"datePublished\":\"2016-04-07T01:59:42+00:00\",\"dateModified\":\"2023-03-21T22:53:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/\"},\"wordCount\":424,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/\",\"name\":\"Detect Expiry Before it Happen with Couchbase Server & N1QL\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-07T01:59:42+00:00\",\"dateModified\":\"2023-03-21T22:53:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#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\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Detecting Expirations Before They Happen with Couchbase Server &amp; N1QL\"}]},{\"@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\/3d8c60500ca29254fcdb2f76f29fb088\",\"name\":\"Cihan Biyikoglu, Director of Product Management, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/a878e65cb37ac2419416d3289816abd5\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3e1ac58dd480dd8a6e93d700a58d329bb81df928061de04395055a45274b8702?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3e1ac58dd480dd8a6e93d700a58d329bb81df928061de04395055a45274b8702?s=96&d=mm&r=g\",\"caption\":\"Cihan Biyikoglu, Director of Product Management, Couchbase\"},\"description\":\"Cihan Biyikoglu is a director of product management at Couchbase, responsible for the Couchbase Server product. Cihan is a big data enthusiast who brings over twenty years of experience to Redis Labs\u2019 product team. Cihan started his career as a C\/C++ developer.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/cihan-biyikoglu\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Detect Expiry Before it Happen with Couchbase Server & N1QL","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\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/","og_locale":"en_US","og_type":"article","og_title":"Detecting Expirations Before They Happen with Couchbase Server &amp; N1QL","og_description":"There are many use cases where auto expiry of documents work perfectly. Maintaining session state, shopping carts, price quotes for travel and more. In all these cases, applications using Couchbase Server, set the expiry time to seconds, minutes or hours [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-04-07T01:59:42+00:00","article_modified_time":"2023-03-21T22:53:18+00:00","author":"Cihan Biyikoglu, Director of Product Management, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Cihan Biyikoglu, Director of Product Management, Couchbase","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/"},"author":{"name":"Cihan Biyikoglu, Director of Product Management, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3d8c60500ca29254fcdb2f76f29fb088"},"headline":"Detecting Expirations Before They Happen with Couchbase Server &amp; N1QL","datePublished":"2016-04-07T01:59:42+00:00","dateModified":"2023-03-21T22:53:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/"},"wordCount":424,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["SQL++ \/ N1QL Query"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/","name":"Detect Expiry Before it Happen with Couchbase Server & N1QL","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-07T01:59:42+00:00","dateModified":"2023-03-21T22:53:18+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#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\/detecting-expirations-of-documents-with-couchbase-server-and-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Detecting Expirations Before They Happen with Couchbase Server &amp; N1QL"}]},{"@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\/3d8c60500ca29254fcdb2f76f29fb088","name":"Cihan Biyikoglu, Director of Product Management, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/a878e65cb37ac2419416d3289816abd5","url":"https:\/\/secure.gravatar.com\/avatar\/3e1ac58dd480dd8a6e93d700a58d329bb81df928061de04395055a45274b8702?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3e1ac58dd480dd8a6e93d700a58d329bb81df928061de04395055a45274b8702?s=96&d=mm&r=g","caption":"Cihan Biyikoglu, Director of Product Management, Couchbase"},"description":"Cihan Biyikoglu is a director of product management at Couchbase, responsible for the Couchbase Server product. Cihan is a big data enthusiast who brings over twenty years of experience to Redis Labs\u2019 product team. Cihan started his career as a C\/C++ developer.","url":"https:\/\/www.couchbase.com\/blog\/author\/cihan-biyikoglu\/"}]}},"authors":[{"term_id":8978,"user_id":7,"is_guest":0,"slug":"cihan-biyikoglu","display_name":"Cihan Biyikoglu, Director of Product Management, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3e1ac58dd480dd8a6e93d700a58d329bb81df928061de04395055a45274b8702?s=96&d=mm&r=g","author_category":"","last_name":"Biyikoglu","first_name":"Cihan","job_title":"","user_url":"","description":"Cihan Biyikoglu is a director of product management at Couchbase, responsible for the Couchbase Server product. Cihan is a big data enthusiast who brings over twenty years of experience to Redis Labs\u2019 product team. Cihan started his career as a C\/C++ developer."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2214","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\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2214"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2214\/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=2214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2214"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}