{"id":10128,"date":"2021-02-10T04:06:49","date_gmt":"2021-02-10T12:06:49","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=10128"},"modified":"2023-05-18T05:31:36","modified_gmt":"2023-05-18T12:31:36","slug":"new-features-in-couchbase-sdk-3-1","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/","title":{"rendered":"New Features in Couchbase SDK 3.1!"},"content":{"rendered":"<p>In the spring of 2020, we released the latest revamp of the Couchbase SDK: 3.0. Shipping alongside Couchbase Server 6.5.0 and offering early, experimental support for Scopes and Collections, it also included a completely new API and consistency across the different platforms. While SDK 3.0 was a significant milestone in the Couchbase history, it was just another incremental improvement for developers working with Couchbase Server. Couchbase Server continues to evolve adding new features and that is why we are now releasing Couchbase SDK 3.1.0 with even more improvements for things such as FTS Geo Polygon support and Bucket Durability Management amongst others.<\/p>\n<p>This post reviews each new feature added across all Couchbase SDKs. The examples are in C# but expect similar idiomatic implementations across all the SDKs whether it be Java, Go or another language.<\/p>\n<h3>FTS Geo Polygon Support<\/h3>\n<p>To augment the two types of Geo queries, <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/fts\/fts-geospatial-queries.html#creating_geospatial_rest_query_radius_based\">Point Distance<\/a> and <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/fts\/fts-geospatial-queries.html#creating_geospatial_rest_query_bounding_box_based\">Bounded Rectangle<\/a>, already supported by Couchbase, in 6.5.0 <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/fts\/fts-geospatial-queries.html#creating_geospatial_rest_query_polygon_based\">Geo Bounded Polygon queries<\/a> support was added. Point Distance queries are useful for finding things like restaurants near you and sorted distance near you. Bounded Rectangle Queries help find restaurants within a specific rectangular boundary near you, such as a city block. Geo Bounded Polygon Queries allows you to find restaurants within a random bounded polygon using an array of coordinate pairs as input parameters.<\/p>\n<pre class=\"lang:c# decode:true\" title=\"Geopolygon Support\"> var query = new GeoPolygonQuery(new List&lt;Coordinate&gt;\r\n {\r\n    Coordinate.OfLatLon(37.79393211306212, -122.44234633404847),\r\n    Coordinate.OfLatLon(37.779958817339967, -122.43977141339417),\r\n    Coordinate.OfLatLon(37.788031092020155, -122.42925715405579),\r\n    Coordinate.OfLatLon(37.79026946582319, -122.41149020154114),\r\n    Coordinate.OfLatLon(37.79571192027403, -122.40735054016113),\r\n    Coordinate.OfLatLon(37.79393211306212, -122.44234633404847)\r\n }).Field(\"geo\");\r\n\r\n var results = await cluster.SearchQueryAsync(\"food-idx\", query);\r\n foreach (var result in results)\r\n {\r\n     \/\/do something with the results.\r\n }\r\n<\/pre>\n<p>You can read more about Geo Polygon queries in <a href=\"https:\/\/www.couchbase.com\/blog\/introducing-geo-bounded-polygon-query-in-full-text-search\/\">this blog post.<\/a><\/p>\n<h3>Bucket Durability Management<\/h3>\n<p><a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/learn\/data\/durability.html\">Durability level guarantees<\/a> persistence for documents; whether or not a document has been persisted to disk and how many replicas it has been written to.<\/p>\n<p>In the older versions of Couchbase Server and SDK, durability level settings could only be provided via K\/V Operation, this could quickly turn into a repetitive and mundane process especially in the case where persistence guarantees were to be the same across all documents within a Bucket. Starting Couchbase Server 6.6 we can now add Durability as a setting on the Bucket level. This feature is now available for you via SDK 3.1 Couchbase Server 6.6 adds Bucket level durability which allows for a certain durability to be applied to all documents within a bucket. In Couchbase SDK 3.1.0 we continue the support into the SDKs using the Bucket Management API.<\/p>\n<pre class=\"lang:c# decode:true \" title=\"Bucket Durability \">var settings = new BucketSettings\r\n            {\r\n                Name = name,\r\n                BucketType = BucketType.Couchbase,\r\n                RamQuotaMB = 100,\r\n                EvictionPolicy = EvictionPolicyType.FullEviction,\r\n                DurabilityMinimumLevel = DurabilityLevel.Majority\r\n            };\r\n \r\n\/\/ create\r\nawait bucketManager.CreateBucketAsync(settings).ConfigureAwait(false);\r\n<\/pre>\n<p>The supported Durability levels are:<\/p>\n<ul>\n<li><strong>Majority<\/strong> \u2013 the document must have been replicated to a majority of the configured nodes in a cluster<\/li>\n<li><strong>MajorityAndPersistActive<\/strong> \u2013 the same as Majority but the document must also be persisted to the active node for durability requirements to be met.<\/li>\n<li><strong>PersistToMajority<\/strong> \u2013 the document must be persisted to a majority of the configured nodes on disk.<\/li>\n<\/ul>\n<p>The default persistence level is none, but you can still specify the durability level upon insert or update of the document.<\/p>\n<h3>Bucket Ephemeral Management<\/h3>\n<p>This feature allows or the eviction policy for documents to be set for Ephemeral Buckets upon creation using the Management API.\u00a0 The following eviction policies are now supported:<\/p>\n<ul>\n<li><strong>NRU Eviction<\/strong> &#8211; When the memory quota is reached, Couchbase Server ejects data that has not been used recently.<\/li>\n<li><strong>No Eviction<\/strong> &#8211; Couchbase Server keeps all data until explicitly deleted but will reject any new data if you reach the quota (dedicated memory) you set for your bucket.<\/li>\n<\/ul>\n<p>Here is an example of setting NRU Eviction:<\/p>\n<pre class=\"lang:c# decode:true\" title=\"Ephemeral Bucket Management\">var bucketManager = cluster.Buckets;\r\n \r\nvar settings = new BucketSettings\r\n{\r\n    Name = \u201csome-bucket\u201d,\r\n    BucketType = BucketType.Ephemeral,\r\n    RamQuotaMB = 100,\r\n    EvictionPolicy = EvictionPolicyType.NotRecentlyUsed\r\n};\r\nawait bucketManager.CreateBucketAsync(settings).ConfigureAwait(false);\r\n<\/pre>\n<p>The default is No Eviction if not specified.<\/p>\n<h3>FTS Flex Index<\/h3>\n<p><b>FTS Flex Index<\/b><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/\">Flex Index<\/a> gives the developer the ability to use the Couchbase Query Service to leverage search capabilities. For example, N1QL uses B-Tree indexes as they have selectivity and FTS uses inverted indexes which provide low selectivity or \u201cfuzziness\u201d; Flex Index allows you to combine for queries that are both exact and fuzzy by simply providing a hint to the service as to which behavior you desire. From the SDK this functionality is exposed but setting a simple flag on the QueryOptions object telling the N1QL service to consider using any FTS index to fulfill the query.<\/p>\n<pre class=\"lang:c# decode:true\" title=\"Flex indexes\">var result = await cluster.QueryAsync&lt;dynamic&gt;(\"SELECT * FROM `default` WHERE type=$name;\",\r\n            options =&gt;\r\n            {\r\n                options.Parameter(\"name\", \"person\");\r\n                options.FlexIndex(true);\r\n            }).ConfigureAwait(false);\r\n<\/pre>\n<p>To use Flex Indexes simply set the FlexIndex property or method on the QueryOptions class.<\/p>\n<h3>FTS Score Parameter<\/h3>\n<p>As an optimization, scoring can now be disabled when doing Search queries. This is exposed as an option block parameter passed:<\/p>\n<pre class=\"lang:c# decode:true\" title=\"FTS Score\">var results = await cluster.SearchQueryAsync(IndexName,\r\n                    new MatchQuery(\"inn\"), options =&gt;\r\n                    {\r\n                        options.Limit(10);\r\n                        options.DisableScoring(true);\r\n                    });\r\n<\/pre>\n<p>Scoring will be disabled if true is passed in, otherwise it will be included in the response.<\/p>\n<h3>GetResult.Expiry has been Deprecated<\/h3>\n<p>Finally, <code>GetResult.Expiry<\/code> has been deprecated and replaced with <code>GetResult.ExpiryTime<\/code> which specifies an instance in time as opposed to a duration.<\/p>\n<h3>Feedback please!<\/h3>\n<p>Those are the new features that have been added to Couchbase SDK 3.1 for Couchbase Server 6.6 and 7.0. We hope you find them useful and feel free to provide feedback on our <a href=\"https:\/\/www.couchbase.com\/forums\/\">forums<\/a> or ask a Couchbase expert a question.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the spring of 2020, we released the latest revamp of the Couchbase SDK: 3.0. Shipping alongside Couchbase Server 6.5.0 and offering early, experimental support for Scopes and Collections, it also included a completely new API and consistency across the [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2201],"tags":[2194,7522,2221],"ppma_author":[8970],"class_list":["post-10128","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tools-sdks","tag-durability","tag-flex-index","tag-transactions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>New Features in Couchbase SDK 3.1! - 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\/new-features-in-couchbase-sdk-3-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New Features in Couchbase SDK 3.1!\" \/>\n<meta property=\"og:description\" content=\"In the spring of 2020, we released the latest revamp of the Couchbase SDK: 3.0. Shipping alongside Couchbase Server 6.5.0 and offering early, experimental support for Scopes and Collections, it also included a completely new API and consistency across the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-10T12:06:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-18T12:31:36+00:00\" \/>\n<meta name=\"author\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jeffrysmorris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"New Features in Couchbase SDK 3.1!\",\"datePublished\":\"2021-02-10T12:06:49+00:00\",\"dateModified\":\"2023-05-18T12:31:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/\"},\"wordCount\":768,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"keywords\":[\"durability\",\"Flex Index\",\"transactions\"],\"articleSection\":[\"Tools &amp; SDKs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/\",\"name\":\"New Features in Couchbase SDK 3.1! - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2021-02-10T12:06:49+00:00\",\"dateModified\":\"2023-05-18T12:31:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/new-features-in-couchbase-sdk-3-1\\\/#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\\\/new-features-in-couchbase-sdk-3-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New Features in Couchbase SDK 3.1!\"}]},{\"@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\\\/b678bdd9f7b21a33d43ea965865a3341\",\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g73188ee2831025d81740e12e1ed80812\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"caption\":\"Jeff Morris, Senior Software Engineer, Couchbase\"},\"description\":\"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/jeffrysmorris\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/author\\\/jeff-morris\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"New Features in Couchbase SDK 3.1! - 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\/new-features-in-couchbase-sdk-3-1\/","og_locale":"en_US","og_type":"article","og_title":"New Features in Couchbase SDK 3.1!","og_description":"In the spring of 2020, we released the latest revamp of the Couchbase SDK: 3.0. Shipping alongside Couchbase Server 6.5.0 and offering early, experimental support for Scopes and Collections, it also included a completely new API and consistency across the [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-02-10T12:06:49+00:00","article_modified_time":"2023-05-18T12:31:36+00:00","author":"Jeff Morris, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@jeffrysmorris","twitter_misc":{"Written by":"Jeff Morris, Senior Software Engineer, Couchbase","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"New Features in Couchbase SDK 3.1!","datePublished":"2021-02-10T12:06:49+00:00","dateModified":"2023-05-18T12:31:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/"},"wordCount":768,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["durability","Flex Index","transactions"],"articleSection":["Tools &amp; SDKs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/","url":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/","name":"New Features in Couchbase SDK 3.1! - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2021-02-10T12:06:49+00:00","dateModified":"2023-05-18T12:31:36+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/new-features-in-couchbase-sdk-3-1\/#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\/new-features-in-couchbase-sdk-3-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"New Features in Couchbase SDK 3.1!"}]},{"@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\/b678bdd9f7b21a33d43ea965865a3341","name":"Jeff Morris, Senior Software Engineer, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g73188ee2831025d81740e12e1ed80812","url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","caption":"Jeff Morris, Senior Software Engineer, Couchbase"},"description":"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/author\/jeff-morris\/"}]}},"acf":[],"authors":[{"term_id":8970,"user_id":21,"is_guest":0,"slug":"jeff-morris","display_name":"Jeff Morris, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/10128","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\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=10128"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/10128\/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=10128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=10128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=10128"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=10128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}