{"id":2217,"date":"2016-04-03T03:45:04","date_gmt":"2016-04-03T03:45:03","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2217"},"modified":"2019-04-01T04:15:35","modified_gmt":"2019-04-01T11:15:35","slug":"exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/","title":{"rendered":"Explorando Couchbase y N1QL a trav\u00e9s de Touchbase usando Node.js y Angular.js - Parte 5: Graficando Datos de Usuarios"},"content":{"rendered":"<h2>Parte 5: Representaci\u00f3n gr\u00e1fica<\/h2>\n<h4>Materiales necesarios:<\/h4>\n<ul>\n<li>Node.js<\/li>\n<li>Express<\/li>\n<li>Gr\u00e1fico.js<\/li>\n<\/ul>\n<h4>M\u00f3dulos de nodo utilizados:<\/h4>\n<ul>\n<li><a href=\"https:\/\/carlcraig.github.io\/tc-angular-chartjs\/\">tc-angular-chartjs<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/expressjs\/body-parser\">body-parser<\/a><\/li>\n<li><a href=\"https:\/\/momentjs.com\/\">momento.js<\/a><\/li>\n<\/ul>\n<h4>Resumen:<\/h4>\n<p>Para mantener una red social y mejorar la experiencia del usuario final, es importante hacer un seguimiento de la informaci\u00f3n sobre estos usuarios y sus h\u00e1bitos de uso. Gran parte de esta informaci\u00f3n puede no parecer inmediatamente \u00fatil para el usuario final, pero una intersecci\u00f3n entre este seguimiento y la informaci\u00f3n \u00fatil para el usuario final son las horas de inicio de sesi\u00f3n. Esta informaci\u00f3n se utiliza de muchas maneras diferentes para optimizar el uso de estas redes para los consumidores (ampliaci\u00f3n de nodos para picos de tr\u00e1fico), as\u00ed como para rastrear posibles problemas de seguridad.<\/p>\n<p>Dado que esta aplicaci\u00f3n se ocupa principalmente de los aspectos b\u00e1sicos de una red social, utilizamos algunos gr\u00e1ficos para analizar los datos que recopilamos sobre el usuario.<\/p>\n<p>Desde el principio hablamos del objeto 'timeTracker' dentro de cada documento de usuario. Este ten\u00eda un atributo 'loginTimes' que hemos estado actualizando continuamente durante cada inicio de sesi\u00f3n con el atributo <strong>\/api\/loginAuth<\/strong> punto final. Si esto es nuevo para usted, consulte la parte 2, donde este punto final se discuti\u00f3 en detalle. En esencia, este endpoint a\u00f1ade continuamente la \u00faltima vez que el usuario se conecta al array 'loginTimes'. Estos son los datos que analizaremos usando una consulta N1QL, as\u00ed como una adaptaci\u00f3n de Chart.js para Angular.js (tc-angular-chartjs), para mostrar la informaci\u00f3n recuperada de la consulta de fecha N1QL.<\/p>\n<p>A continuaci\u00f3n, tenemos el punto final de estad\u00edsticas que se utiliza para recuperar los datos del atributo 'loginTimes' de cada usuario y devolver un objeto que la biblioteca de gr\u00e1ficos front-end puede utilizar para trazar el uso del sitio a lo largo del tiempo.<\/p>\n<h4>API \"\/api\/graphData<\/h4>\n<p><script src=\"https:\/\/gist.github.com\/pranavmayuram\/d245ebb79db87fe54fef.js\"><\/script><\/p>\n<p>Este punto final recibe un argumento, que es el \u00e1mbito de tiempo que debe mostrarse. En este caso, la funci\u00f3n acepta \"d\u00eda\" o \"semana\". Devolver\u00e1 una matriz de 24 valores enteros (\"d\u00eda\") o 7 valores enteros (\"semana\") en funci\u00f3n del tipo de intervalo de fechas especificado. La funci\u00f3n que obtiene todos estos datos es <strong>Estad\u00edsticas.nuevoGr\u00e1fico<\/strong>que crear\u00e1 una consulta N1QL para obtener los valores que deseamos. La funci\u00f3n se muestra a continuaci\u00f3n.<\/p>\n<h4>Funci\u00f3n 'Statistics.newGraph<\/h4>\n<p><script src=\"https:\/\/gist.github.com\/pranavmayuram\/cc80101d7edbfd36962c.js\"><\/script><\/p>\n<p>Esta funci\u00f3n incre\u00edblemente larga en realidad hace algo muy sencillo. Tiene tres partes:<\/p>\n<ol>\n<li>Compruebe el intervalo de fechas de \"semana\" o \"d\u00eda\".<\/li>\n<li>Ejecutar consulta N1QL para agrupar datos por los \u00faltimos 7 d\u00edas o las \u00faltimas 24 horas<\/li>\n<li>Utilice moment.js y matrices para crear el orden correcto del eje x<\/li>\n<\/ol>\n<p>La primera parte de esto se logra simplemente usando sentencias 'if\/else'. La siguiente parte se vuelve un poco m\u00e1s complicada, as\u00ed que nos tomaremos un segundo para desglosar la consulta N1QL que se est\u00e1 ejecutando, y c\u00f3mo entendemos qu\u00e9 datos recuperar\u00e1 para nosotros.<\/p>\n<h4>Ejemplo de consulta de fecha N1QL para el d\u00eda anterior<\/h4>\n<p><script src=\"https:\/\/gist.github.com\/pranavmayuram\/adf8f9baeb1489ac5189.js\"><\/script><\/p>\n<p>Tomemos el ejemplo de un \"d\u00eda\" para entender el proceso. La forma de verlo es que primero desanidamos todos los elementos del array en sus propios objetos separados. De esta forma podemos observar cada uno de ellos individualmente. Despu\u00e9s <strong>UNNEST<\/strong> averiguamos cu\u00e1ntas horas hace que se produjo cada inicio de sesi\u00f3n, desde el momento de la solicitud de la API, lo que se hace utilizando <strong>DATE_DIFF_STR(STR_TO_UTC(NOW_STR())<\/strong>. A continuaci\u00f3n, tomamos cada uno de estos tiempos y <strong>GRUPO POR<\/strong> cu\u00e1nto tiempo hace que ocurrieron. Bas\u00e1ndonos en estos grupos, obtenemos un <strong>CONTAR<\/strong> del n\u00famero de veces que est\u00e1n en ese grupo (cu\u00e1ntos de estos inicios de sesi\u00f3n se produjeron por hora). Esto nos da una matriz de objetos que contienen el n\u00famero de horas hace que estos tiempos se produjeron, y un recuento que describe cu\u00e1ntos inicios de sesi\u00f3n se produjeron hace este n\u00famero de horas. Una vez que tenemos esto, creamos un <strong>TENIENDO<\/strong> que comprueba que el n\u00famero de horas transcurridas no sea superior a 24, de forma que simplemente obtengamos un d\u00eda, ni m\u00e1s ni menos. Esto nos da exactamente lo que necesit\u00e1bamos, que es una matriz de objetos estratificados por el n\u00famero de horas hace que cada uno de estos inicios de sesi\u00f3n ocurri\u00f3, as\u00ed como cu\u00e1ntos inicios de sesi\u00f3n ocurrieron.<\/p>\n<p>Despu\u00e9s de esto, tomamos el array de objetos, y colocamos los recuentos de entradas en un array, que est\u00e1 indexado en base a la hora en la que ocurrieron. Este array se inicializa con 0s, para que no haya errores al graficar valores indefinidos. Una vez hecho esto, el proceso de manejo de datos de la consulta N1QL est\u00e1 completo.<\/p>\n<p>De este modo, nos ocupamos de la mayor parte del trabajo, y ahora todo lo que tenemos que hacer es simplemente emparejarlos con las horas y fechas adecuadas. Utilizamos una matriz predefinida de <strong>horasX<\/strong> o <strong>d\u00edasX<\/strong> y hacemos un bucle a trav\u00e9s de \u00e9l para crear el eje x apropiado. Usando el d\u00eda actual, que es encontrado por moment.js, entonces creamos un patr\u00f3n iterativo exitoso para encontrar los d\u00edas y semanas correspondientes. Cuando usamos la funci\u00f3n moment.js para <strong>'momento().d\u00eda();'<\/strong>etc. recuperamos un d\u00eda o una hora indexados empezando por 1. Esto se tiene en cuenta en el patr\u00f3n iterativo.<\/p>\n<h4>Uso del front-end<\/h4>\n<p>Una vez creadas\/obtenidas estas dos matrices, no hay m\u00e1s trabajo que hacer, salvo en el front-end. Simplemente devolvemos estas dos matrices al punto final de la API en forma de <strong>graphObj<\/strong> y luego enviarlos de vuelta al cliente en nuestro <strong>\/api\/graphData<\/strong> punto final. Esto completa el trabajo de back-end. Un conjunto de c\u00f3digo de ejemplo de usar esto con tc-angular-chartjs se puede ver en el repositorio de github en <strong>public\/js\/touchbase.js<\/strong> en 'statisticsController', y el HTML correspondiente puede verse en <strong>public\/html\/estadisticas-parciales.html<\/strong>.<\/p>\n<p>Con esto concluye la parte de gr\u00e1ficos del tutorial de Touchbase. Por favor, comente a continuaci\u00f3n con cualquier comentario o cr\u00edtica. Gracias por leer, y espero que tengas un tiempo m\u00e1s f\u00e1cil haciendo hermosos gr\u00e1ficos usando consultas de fecha N1QL y una gran biblioteca de gr\u00e1ficos front-end.<\/p>","protected":false},"excerpt":{"rendered":"<p>Part 5: Graphing Necessary Materials: Node.js Express Chart.js Node Modules Used: tc-angular-chartjs body-parser moment.js Summary: To maintain a social network, and improve the experience for an end-user, it&#8217;s important to keep track of information about these users and their usage [&hellip;]<\/p>","protected":false},"author":60,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1819,1822,1812],"tags":[],"ppma_author":[9034],"class_list":["post-2217","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-modeling","category-node-js","category-n1ql-query"],"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>Graph user data using N!QL date queries- 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\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 5: Graphing User Data\" \/>\n<meta property=\"og:description\" content=\"Part 5: Graphing Necessary Materials: Node.js Express Chart.js Node Modules Used: tc-angular-chartjs body-parser moment.js Summary: To maintain a social network, and improve the experience for an end-user, it&#8217;s important to keep track of information about these users and their usage [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-03T03:45:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-04-01T11:15:35+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=\"Pranav Mayuram\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pranav Mayuram\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/\"},\"author\":{\"name\":\"Pranav Mayuram\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/454261061bad5159ad2696e0bf162eaa\"},\"headline\":\"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 5: Graphing User Data\",\"datePublished\":\"2016-04-03T03:45:03+00:00\",\"dateModified\":\"2019-04-01T11:15:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/\"},\"wordCount\":979,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Data Modeling\",\"Node.js\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/\",\"name\":\"Graph user data using N!QL date queries- The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-03T03:45:03+00:00\",\"dateModified\":\"2019-04-01T11:15:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#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\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 5: Graphing User Data\"}]},{\"@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\/454261061bad5159ad2696e0bf162eaa\",\"name\":\"Pranav Mayuram\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/61baa4ff0f18aa9a8ce672f0f97f1ac0\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g\",\"caption\":\"Pranav Mayuram\"},\"description\":\"Pranav Mayuram is a N1QL Query language intern, Couchbase. Built a social network platform, Touchbase, using Couchbase Server, Node.js, Express &amp; Angular.js.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/pranav-mayuram\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Graph user data using N!QL date queries- 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\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/","og_locale":"es_MX","og_type":"article","og_title":"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 5: Graphing User Data","og_description":"Part 5: Graphing Necessary Materials: Node.js Express Chart.js Node Modules Used: tc-angular-chartjs body-parser moment.js Summary: To maintain a social network, and improve the experience for an end-user, it&#8217;s important to keep track of information about these users and their usage [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-04-03T03:45:03+00:00","article_modified_time":"2019-04-01T11:15:35+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":"Pranav Mayuram","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Pranav Mayuram","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/"},"author":{"name":"Pranav Mayuram","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/454261061bad5159ad2696e0bf162eaa"},"headline":"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 5: Graphing User Data","datePublished":"2016-04-03T03:45:03+00:00","dateModified":"2019-04-01T11:15:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/"},"wordCount":979,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Data Modeling","Node.js","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/","url":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/","name":"Graph user data using N!QL date queries- The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-03T03:45:03+00:00","dateModified":"2019-04-01T11:15:35+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#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\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-5-graphing-user-data\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 5: Graphing User Data"}]},{"@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\/454261061bad5159ad2696e0bf162eaa","name":"Pranav Mayuram","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/61baa4ff0f18aa9a8ce672f0f97f1ac0","url":"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g","caption":"Pranav Mayuram"},"description":"Pranav Mayuram es pasante de lenguaje de consulta N1QL, Couchbase. Construy\u00f3 una plataforma de red social, Touchbase, usando Couchbase Server, Node.js, Express &amp; Angular.js.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/pranav-mayuram\/"}]}},"authors":[{"term_id":9034,"user_id":60,"is_guest":0,"slug":"pranav-mayuram","display_name":"Pranav Mayuram","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g","first_name":"Pranav","last_name":"Mayuram","user_url":"","author_category":"","description":"Pranav Mayuram es pasante de lenguaje de consulta N1QL, Couchbase. Construy\u00f3 una plataforma de red social, Touchbase, usando Couchbase Server, Node.js, Express &amp; Angular.js."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2217","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\/60"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2217"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2217\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2217"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}