Usar Clojure con MongoDB

2 minutos

Clojure

MongoDB es una base de datos realmente rápida y bien adaptada a los tiempos que corren. No solo usa JSON como parte de su sintáxis, sino que aporta una serie de optimizaciones que logran consultas complejas con veloces respuestas. ¿Cómo podemos incluir esta bestia a Clojure? ¿Cual es la librería más potente y actualizada? Veamos los pasos a seguir.

Añade las siguientes dependencias al project.clj.

;; MongoDB
[clj-time "0.15.2"]
[com.novemberain/monger "3.5.0"]

Monger es la librería que te ayudará a trabajar con MongoDB, mientras que clj-time es una dependencia necesaria.

Ahora en el archivo que estés trabajando incluye las siguientes partes.

;;;; Librerías necesaria de Monger 
(ns mi-app
  (:require
   [monger.core :as mg]
   [monger.collection :as coll]
   [monger.joda-time]
   [monger.query :refer :all]
   ))

;;;; Si no se le indica lo contrario se conecta con localhost en el puerto por defecto (27017) 
(def conn (mg/connect))

;;;; Seleccionas la base de datos que te quieres conectar. En este ejemplo "mi-db"
(def db (mg/get-db conn "mi-db"))

;;;; Realizas una consulta en la colección "mi-coleccion"
(def resultados (with-collection db "mi-coleccion" (find {})))

¡Y ya esta! En la variable resultados está esperando toda la información que buscastes.

¿Necesitas filtrar? En este ejemplo busco los usuarios que se llamen Lucia.

(def resultados (with-collection db "usuarios" (find {:nombre "Lucia"})))

Integrar con Tadam Web Framework

En el siguiente ejemplo puedes ver como utilizarlo con Tadam para montar un servidor web que devulva un bonito JSON.

;;;; Views public web
(ns demo-mongo.views.public
  (:require
   [tadam.templates :refer [render-JSON]]
   [monger.core :as mg]
   [monger.collection :as coll]
   [monger.joda-time]
   [monger.json]
   [monger.query :refer :all]
   ))

(def conn (mg/connect))

(def db   (mg/get-db conn "mi-db"))

(defn generar-json
  ;; View JSON
  [req]
  (let [data (with-collection db "mi-coleccion" (find {}))]
    (render-JSON req data)))

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...