{"id":7255,"date":"2019-08-09T10:00:42","date_gmt":"2019-08-09T17:00:42","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7255"},"modified":"2023-05-25T04:26:23","modified_gmt":"2023-05-25T11:26:23","slug":"get-started-with-couchbase-collections-using-the-demo-app","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/get-started-with-couchbase-collections-using-the-demo-app\/","title":{"rendered":"Introducci\u00f3n a Couchbase Collections con la aplicaci\u00f3n de demostraci\u00f3n"},"content":{"rendered":"<p>Las colecciones son una nueva caracter\u00edstica de Couchbase 6.5. Te permiten agrupar documentos similares dentro de cada bucket, igual que las tablas en las bases de datos relacionales agrupan registros similares dentro de cada base de datos. Las colecciones estar\u00e1n totalmente soportadas en Couchbase 7.0, pero puedes probarlas ahora mismo en la versi\u00f3n 6.5 de Couchbase como una caracter\u00edstica Developer Preview. La Aplicaci\u00f3n Demo ya las utiliza.<\/p>\n<p><strong>\u00bfQu\u00e9 son las colecciones?<\/strong><br \/>\nSi vienes del mundo de las bases de datos relacionales, puedes pensar en las colecciones como si fueran tablas. Todos los documentos de una colecci\u00f3n couchbase deben ser del mismo tipo, del mismo modo que todos los registros de una tabla relacional son del mismo tipo. Puede haber una tabla \"cliente\" o una tabla \"producto\" en un esquema relacional; del mismo modo, puede haber una colecci\u00f3n \"cliente\" en un bucket de Couchbase.<\/p>\n<p>En versiones anteriores de Couchbase, los datos se organizaban as\u00ed:<\/p>\n<ul>\n<li>Grupo\n<ul>\n<li>Cubo\n<ul>\n<li>Documento<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>En Couchbase 6.5, hay dos capas m\u00e1s, as\u00ed:<\/p>\n<ul>\n<li>Grupo\n<ul>\n<li>Cubo\n<ul>\n<li><strong>Alcance<\/strong>\n<ul>\n<li><strong>Colecci\u00f3n<\/strong>\n<ul>\n<li>Documento<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><b>\u00bfQu\u00e9 utilidad tienen las colecciones?<\/b><\/p>\n<p>Las colecciones son el nivel m\u00e1s bajo de organizaci\u00f3n documental y contienen directamente documentos. Son \u00fatiles porque permiten agrupar los documentos con mayor precisi\u00f3n que antes. En lugar de volcar todos los tipos de documentos (productos, pedidos, clientes) en un \u00fanico bucket y distinguirlos por un campo de tipo, puede crear una colecci\u00f3n para cada tipo. Y cuando se consulta, se puede consultar la colecci\u00f3n, no s\u00f3lo todo el bucket. Tambi\u00e9n podr\u00e1 controlar el acceso a nivel de colecci\u00f3n.<\/p>\n<p>Los \u00e1mbitos son el nivel de organizaci\u00f3n por encima de las colecciones. Los \u00e1mbitos contienen colecciones y las colecciones contienen documentos. Hay diferentes formas de usar los \u00e1mbitos, dependiendo de para qu\u00e9 se est\u00e9 usando el cluster de Couchbase. Si est\u00e1 soportando muchas aplicaciones internas diferentes para una compa\u00f1\u00eda, cada aplicaci\u00f3n deber\u00eda tener su propio \u00e1mbito. Si el cluster est\u00e1 siendo usado para servir a muchas organizaciones cliente, cada una ejecutando su propia copia de una aplicaci\u00f3n, cada copia deber\u00eda tener un scope propio. Del mismo modo, si un cl\u00faster est\u00e1 siendo utilizado por grupos de desarrollo, tal vez para pruebas, la unidad de asignaci\u00f3n debe ser un \u00e1mbito. En cada caso, el propietario puede crear las colecciones que desee en el \u00e1mbito que se le asigne.<\/p>\n<p>Los \u00e1mbitos deben ser \u00fanicos dentro de sus cubos, y las colecciones deben ser \u00fanicas dentro de sus \u00e1mbitos. As\u00ed, el bucket \"default\" podr\u00eda contener dos \u00e1mbitos \"dev\" y \"prod\", cada uno con sus propias colecciones \"products\" y \"customers\".<\/p>\n<p><b>Uso de las colecciones<\/b><\/p>\n<p>Puedes ver colecciones y \u00e1mbitos siendo usados en la \u00faltima versi\u00f3n de la Aplicaci\u00f3n Demo de Couchbase, aqu\u00ed:<\/p>\n<p><a href=\"https:\/\/github.com\/couchbaselabs\/try-cb-java\/tree\/6.5.0-branch\">https:\/\/github.com\/couchbaselabs\/try-cb-java\/tree\/6.5.0-branch<\/a><\/p>\n<p>Esta aplicaci\u00f3n utiliza un bucket \"travel-sample\" ya existente para permitir al usuario buscar vuelos y hoteles, pero almacena sus propios datos de usuario y reservas en colecciones. La estructura utilizada es la siguiente:<\/p>\n<ul>\n<li style=\"font-weight: 400\">Cubo: por defecto\n<ul>\n<li style=\"font-weight: 400\">Alcance: larson-travel\n<ul>\n<li style=\"font-weight: 400\">Colecci\u00f3n: usuarios<\/li>\n<li style=\"font-weight: 400\">Colecci\u00f3n: vuelos<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Cuando el usuario crea una cuenta, se crea un documento en la colecci\u00f3n \"usuarios\". Cuando reservan vuelos, se crean documentos en la colecci\u00f3n \"vuelos\", y se hace referencia a ellos en el documento del usuario en la colecci\u00f3n \"usuarios\".<\/p>\n<p>Este dise\u00f1o permite que varias aplicaciones compartan el mismo bucket. Si tuvi\u00e9ramos una segunda instancia de la aplicaci\u00f3n de demostraci\u00f3n, utilizada por otra agencia de viajes, podr\u00edamos crear otro \u00e1mbito (con sus propias colecciones \"users\" y \"flights\") y dirigir la segunda instancia a este \u00e1mbito actualizando su archivo application.properties. Las dos instancias funcionar\u00edan una al lado de la otra, sin interferir entre s\u00ed.<\/p>\n<p><b>C\u00f3digo de ejemplo<\/b><\/p>\n<p>Para empezar, en el archivo application.properties se nombran el bucket y el scope que contienen la informaci\u00f3n sobre usuarios y reservas:<\/p>\n<pre class=\"nums:false lang:default decode:true\">storage.clientorg.bucket=default\r\nstorage.clientorg.scope=larson-travel<\/pre>\n<p>Estos valores de configuraci\u00f3n se recogen en el archivo Database.java:<\/p>\n<pre class=\"nums:false lang:java decode:true\">@Configuration\r\npublic class Database {\r\n\r\n    ...\r\n\r\n    @Value(\"${storage.clientorg.bucket}\")\r\n    private String clientOrgBucket;\r\n\r\n    @Value(\"${storage.clientorg.scope}\")\r\n    private String clientOrgScope;\r\n\r\n    ...\r\n\r\n    public Bucket clientOrgBucket() {\r\n        return loginCluster().bucket(clientOrgBucket);\r\n    }\r\n\r\n    public @Bean Scope clientOrgScope() {\r\n        return clientOrgBucket().scope(clientOrgScope);\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>En User.java, vemos c\u00f3mo se registra un nuevo vuelo para el usuario. Se pasa el bean scope, creado anteriormente. El nombre de usuario es el id el nombre con el que el usuario ha iniciado sesi\u00f3n.<\/p>\n<pre class=\"nums:false lang:java decode:true java\">    public Result&lt;Map&lt;String, Object&gt;&gt; registerFlightForUser(final Scope scope, \r\n        final String username, final JsonArray newFlights) {\r\n<\/pre>\n<p>El id del documento de usuario es el nombre de usuario del usuario. La aplicaci\u00f3n sabe que debe obtenerlo de la colecci\u00f3n \"users\", en la colecci\u00f3n utilizada por la aplicaci\u00f3n.<\/p>\n<pre class=\"nums:false lang:java decode:true\">        String userId = username;\r\n        Collection usersCollection = scope.collection(USERS_COLLECTION_NAME);\r\n        Collection flightsCollection = scope.collection(FLIGHTS_COLLECTION_NAME);\r\n        Optional&lt;GetResult&gt; userDataFetch = usersCollection.get(userId);\r\n        if (!userDataFetch.isPresent()) {\r\n            throw new IllegalStateException();\r\n        }\r\n        JsonObject userData = userDataFetch.get().contentAsObject();\r\n\r\n        if (newFlights == null) {\r\n            throw new IllegalArgumentException(\"No flights in payload\");\r\n        }\r\n\r\n        JsonArray added = JsonArray.empty();\r\n<\/pre>\n<p>Los vuelos que el usuario ha reservado se almacenan en el documento de usuario, en un array llamado \"vuelos\".<\/p>\n<pre class=\"nums:false lang:java decode:true\">        JsonArray allBookedFlights = userData.getArray(\"flights\");\r\n        if(allBookedFlights == null) {\r\n            allBookedFlights = JsonArray.create();\r\n        }\r\n<\/pre>\n<p>A\u00f1adimos los nuevos vuelos a los ya existentes.<\/p>\n<pre class=\"nums:false lang:java decode:true\">        for (Object newFlight : newFlights) {\r\n            checkFlight(newFlight);\r\n            JsonObject t = ((JsonObject) newFlight);\r\n            t.put(\"bookedon\", \"try-cb-java\");\r\n            String flightId = UUID.randomUUID().toString();\r\n            flightsCollection.insert(flightId, t);\r\n            allBookedFlights.add(flightId);\r\n            added.add(t);\r\n        }\r\n\r\n        userData.put(\"flights\", allBookedFlights);\r\n<\/pre>\n<p>A continuaci\u00f3n, almacenamos la nueva versi\u00f3n del documento de usuario.<\/p>\n<pre class=\"nums:false lang:java decode:true\">        usersCollection.upsert(userId, userData);\r\n\r\n        JsonObject responseData = JsonObject.create()\r\n            .put(\"added\", added);\r\n\r\n        return Result.of(responseData.toMap(), \r\n            \"Booked flight in Couchbase document \" + userId);\r\n    }\r\n<\/pre>\n<p>Justo debajo, vemos c\u00f3mo se recuperan los vuelos de un usuario.<\/p>\n<pre class=\"nums:false lang:java decode:true\">    public List&lt;Map&lt;String, Object&gt;&gt; getFlightsForUser(final Scope scope, \r\n        final String username) {\r\n<\/pre>\n<p>Obtener el documento de usuario de la colecci\u00f3n \"usuarios\".<\/p>\n<pre class=\"nums:false lang:java decode:true\">        Collection users = scope.collection(USERS_COLLECTION_NAME);\r\n        Optional&lt;GetResult&gt; doc = users.get(username);\r\n        if (!doc.isPresent()) {\r\n            return Collections.emptyList();\r\n        }\r\n        JsonObject data = doc.get().contentAsObject();\r\n<\/pre>\n<p>Obtiene la matriz \"flights\" del documento de usuario. Contiene una lista de identificadores de vuelo.<\/p>\n<pre class=\"nums:false lang:default decode:true\">        JsonArray flights = data.getArray(\"flights\");\r\n        if (flights == null) {\r\n            return Collections.emptyList();\r\n        }\r\n<\/pre>\n<p>Recuperar cada documento de vuelo de la colecci\u00f3n \"vuelos\" por ID.<\/p>\n<pre class=\"nums:false lang:java decode:true\">        \/\/ The \"flights\" array contains flight ids. Convert them to actual objects.\r\n        Collection flightsCollection = scope.collection(FLIGHTS_COLLECTION_NAME);\r\n        List&lt;Map&lt;String, Object&gt;&gt; results = new ArrayList&lt;Map&lt;String, Object&gt;&gt;();\r\n        for (int i = 0; i &lt; flights.size(); i++) {\r\n            String flightId = flights.getString(i);\r\n            Optional&lt;GetResult&gt; res = flightsCollection.get(flightId);\r\n            if (!res.isPresent()) {\r\n                throw new RuntimeException(\"Unable to retrieve flight id \" + flightId);\r\n            }\r\n            Map&lt;String, Object&gt; flight = res.get().contentAsObject().toMap();\r\n            results.add(flight);\r\n        }\r\n        return results;\r\n    }\r\n<\/pre>\n<p><b>Cambios respecto al c\u00f3digo anterior<\/b><\/p>\n<p>El c\u00f3digo para trabajar con usuarios y sus vuelos era bastante diferente en la versi\u00f3n anterior, que no utilizaba colecciones. All\u00ed, los vuelos reservados se almacenaban directamente en el documento de usuario. El documento de usuario se almacenaba directamente en la tabla \"travel-sample\". Este es el c\u00f3digo original de la funci\u00f3n registerFlightForUser().<\/p>\n<pre class=\"nums:false lang:java decode:true\">   public Result&lt;Map&lt;String, Object&gt;&gt; registerFlightForUser(final Bucket bucket,\r\n \tfinal String username, final JsonArray newFlights) {\r\n<\/pre>\n<p>F\u00edjese en el uso de un prefijo para marcar el tipo de documento. Esto no es necesario una vez que las colecciones est\u00e1n disponibles.<\/p>\n<pre class=\"nums:false lang:java decode:true\">        JsonDocument userData = bucket.get(\"user::\" + username);\r\n        if (userData == null) {\r\n            throw new IllegalStateException();\r\n        }\r\n\r\n        if (newFlights == null) {\r\n            throw new IllegalArgumentException(\"No flights in payload\");\r\n        }\r\n\r\n        JsonArray added = JsonArray.empty();\r\n<\/pre>\n<p>Recuperamos la matriz de vuelos, que ya est\u00e1 en el documento.<\/p>\n<pre class=\"nums:false lang:java decode:true\">        JsonArray allBookedFlights = userData.content().getArray(\"flights\");\r\n        if(allBookedFlights == null) {\r\n            allBookedFlights = JsonArray.create();\r\n        }\r\n\r\n        for (Object newFlight : newFlights) {\r\n            checkFlight(newFlight);\r\n            JsonObject t = ((JsonObject) newFlight);\r\n            t.put(\"bookedon\", \"try-cb-java\");\r\n<\/pre>\n<p>A\u00f1adimos los vuelos a la lista de vuelos reservados.<\/p>\n<pre class=\"nums:false lang:java decode:true\">            allBookedFlights.add(t);\r\n            added.add(t);\r\n        }\r\n\r\n        userData.content().put(\"flights\", allBookedFlights);\r\n<\/pre>\n<p>Y almacenamos el documento de usuario.<\/p>\n<pre class=\"nums:false lang:java decode:true\">        JsonDocument response = bucket.upsert(userData);\r\n\r\n        JsonObject responseData = JsonObject.create()\r\n            .put(\"added\", added);\r\n\r\n        return Result.of(responseData.toMap(), \"Booked flight in Couchbase document \" + response.id());\r\n    }\r\n<\/pre>\n<p>Obviamente, separar los vuelos reservados del usuario no es terriblemente convincente en una aplicaci\u00f3n de juguete. Pero en una aplicaci\u00f3n de producci\u00f3n, en la que estamos almacenando muchos tipos de informaci\u00f3n sobre cada usuario, tendr\u00eda sentido almacenar algunos registros fuera del documento de usuario, en particular los que fueran grandes o numerosos o propensos a cambiar con frecuencia.<\/p>\n<p><b>Documentaci\u00f3n sobre \u00e1mbitos y colecciones<\/b><\/p>\n<p>Para saber m\u00e1s sobre c\u00f3mo trabajar directamente con \u00e1mbitos y colecciones, consulte <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/developer-preview\/collections\/collections-overview.html\">esta documentaci\u00f3n<\/a>que explica la API RESTful para trabajar con ambos, los comandos CLI pertinentes e informaci\u00f3n sobre las colecciones disponibles en <em>cbstats<\/em>.<\/p>\n<p><b>Resumen<\/b><\/p>\n<p>Las colecciones y los \u00e1mbitos te permiten organizar documentos dentro de un bucket de Couchbase, al igual que las tablas y los esquemas te permiten organizar filas dentro de bases de datos relacionales. La versi\u00f3n actual de Couchbase 6.5 GA proporciona soporte temprano y limitado para colecciones y \u00e1mbitos como una caracter\u00edstica Developer Preview. Para empezar con colecciones y \u00e1mbitos, puedes empezar a trabajar con la Aplicaci\u00f3n Demo Java ahora mismo.<\/p>\n<h3>Recursos<\/h3>\n<p class=\"p1\"><i>Descargar<\/i><\/p>\n<p class=\"p2\"><span class=\"s1\"><a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/?family=server&amp;product=couchbase-server-developer\">Descargar Couchbase Server 6.5<\/a><\/span><\/p>\n<p class=\"p1\"><i>\u00a0<\/i><i>Documentaci\u00f3n<\/i><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/developer-preview\/collections\/collections-overview.html\">Documentaci\u00f3n de Couchbase Collections 6.5<\/a><\/p>\n<p class=\"p2\"><span class=\"s1\"><a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/release-notes\/relnotes.html\">Notas de la versi\u00f3n de Couchbase Server 6.5<\/a><\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/introduction\/whats-new.html\">Novedades de Couchbase Server 6.5<\/a><\/span><\/p>\n<p class=\"p1\"><i>Blogs<\/i><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/introducing-collections-developer-preview-in-couchbase-server-6-5\/\">Presentaci\u00f3n de Collections - Developer Preview en Couchbase Server 6.5<\/a><\/p>\n<p class=\"p2\"><span class=\"s1\"><a href=\"https:\/\/www.couchbase.com\/blog\/es\/announcing-couchbase-server-6-5-0-whats-new-and-improved\/\">Anuncio de Couchbase Server 6.5 - Novedades y mejoras<\/a><\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><a href=\"https:\/\/www.couchbase.com\/blog\/es\/tag\/6-5\/\"><b>Todos los blogs de 6.5<\/b><\/a><\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Collections are a new feature in Couchbase 6.5. They let you group similar documents within each bucket, just as tables in relational databases collect similar records within each database. Collections will be fully supported in Couchbase 7.0, but you can [&hellip;]<\/p>","protected":false},"author":8157,"featured_media":7449,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1816,1819],"tags":[2378,2364],"ppma_author":[9058],"class_list":["post-7255","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","category-data-modeling","tag-6-5","tag-collections"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Get Started with Couchbase Collections Using the Demo App<\/title>\n<meta name=\"description\" content=\"Collections let you group similar documents within each bucket, just like records in tables. Collections previewed in Couchbase 6.5.\" \/>\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\/es\/get-started-with-couchbase-collections-using-the-demo-app\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Get Started with Couchbase Collections Using the Demo App\" \/>\n<meta property=\"og:description\" content=\"Collections let you group similar documents within each bucket, just like records in tables. Collections previewed in Couchbase 6.5.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/get-started-with-couchbase-collections-using-the-demo-app\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-09T17:00:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-25T11:26:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/Transactions-alternative-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"553\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Johan Larson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Johan Larson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/\"},\"author\":{\"name\":\"Johan Larson\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/043ccbbfc54b95927c73f81ec7f6a0a1\"},\"headline\":\"Get Started with Couchbase Collections Using the Demo App\",\"datePublished\":\"2019-08-09T17:00:42+00:00\",\"dateModified\":\"2023-05-25T11:26:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/\"},\"wordCount\":1055,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-alternative-1.jpg\",\"keywords\":[\"6.5\",\"collections\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\",\"Data Modeling\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/\",\"name\":\"Get Started with Couchbase Collections Using the Demo App\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-alternative-1.jpg\",\"datePublished\":\"2019-08-09T17:00:42+00:00\",\"dateModified\":\"2023-05-25T11:26:23+00:00\",\"description\":\"Collections let you group similar documents within each bucket, just like records in tables. Collections previewed in Couchbase 6.5.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-alternative-1.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-alternative-1.jpg\",\"width\":1400,\"height\":553},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get Started with Couchbase Collections Using the Demo App\"}]},{\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\/043ccbbfc54b95927c73f81ec7f6a0a1\",\"name\":\"Johan Larson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/93b175bb8728e12439dd573fc27b9d1a\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g\",\"caption\":\"Johan Larson\"},\"description\":\"Johan Larson is a Senior Software Engineer at Couchbase. Johan's work responsibility is building an SQL-based query language for JSON data in a distributed NoSQL system.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/johan-larson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introducci\u00f3n a Couchbase Collections con la aplicaci\u00f3n de demostraci\u00f3n","description":"Las colecciones te permiten agrupar documentos similares dentro de cada bucket, igual que los registros en las tablas. Colecciones previsualizadas en Couchbase 6.5.","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\/es\/get-started-with-couchbase-collections-using-the-demo-app\/","og_locale":"es_MX","og_type":"article","og_title":"Get Started with Couchbase Collections Using the Demo App","og_description":"Collections let you group similar documents within each bucket, just like records in tables. Collections previewed in Couchbase 6.5.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/get-started-with-couchbase-collections-using-the-demo-app\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-08-09T17:00:42+00:00","article_modified_time":"2023-05-25T11:26:23+00:00","og_image":[{"width":1400,"height":553,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/Transactions-alternative-1.jpg","type":"image\/jpeg"}],"author":"Johan Larson","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Johan Larson","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/"},"author":{"name":"Johan Larson","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/043ccbbfc54b95927c73f81ec7f6a0a1"},"headline":"Get Started with Couchbase Collections Using the Demo App","datePublished":"2019-08-09T17:00:42+00:00","dateModified":"2023-05-25T11:26:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/"},"wordCount":1055,"commentCount":3,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-alternative-1.jpg","keywords":["6.5","collections"],"articleSection":["Best Practices and Tutorials","Couchbase Server","Data Modeling"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/","url":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/","name":"Introducci\u00f3n a Couchbase Collections con la aplicaci\u00f3n de demostraci\u00f3n","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-alternative-1.jpg","datePublished":"2019-08-09T17:00:42+00:00","dateModified":"2023-05-25T11:26:23+00:00","description":"Las colecciones te permiten agrupar documentos similares dentro de cada bucket, igual que los registros en las tablas. Colecciones previsualizadas en Couchbase 6.5.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-alternative-1.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-alternative-1.jpg","width":1400,"height":553},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/get-started-with-couchbase-collections-using-the-demo-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Get Started with Couchbase Collections Using the Demo App"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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\/043ccbbfc54b95927c73f81ec7f6a0a1","name":"Johan Larson","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/93b175bb8728e12439dd573fc27b9d1a","url":"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g","caption":"Johan Larson"},"description":"Johan Larson es Ingeniero de Software Senior en Couchbase. La responsabilidad del trabajo de Johan es construir un lenguaje de consulta basado en SQL para datos JSON en un sistema NoSQL distribuido.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/johan-larson\/"}]}},"authors":[{"term_id":9058,"user_id":8157,"is_guest":0,"slug":"johan-larson","display_name":"Johan Larson","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g","author_category":"","last_name":"Larson","first_name":"Johan","job_title":"","user_url":"","description":"Johan Larson es Ingeniero de Software Senior en Couchbase. La responsabilidad del trabajo de Johan es construir un lenguaje de consulta basado en SQL para datos JSON en un sistema NoSQL distribuido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/7255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/8157"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=7255"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/7255\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/7449"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=7255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=7255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=7255"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=7255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}