Accediendo a MongoDB desde R

Si leéis el blog con cierta frecuencia seguro que ya os suena MongoDB, una base de datos NoSQL de tipo documental que almacena BSON (JSON binarios).

R por su lado es un lenguaje para análisis estadístico y generación de gráficos (ver post)

En R existen 2 paquetes que permiten conectar con MongoDB: RMongo y rmongodb.

RMongo funciona a través de llamadas Java al mongo-java-driver y rmongodb a través del driver C:

Veamos como funciona cada uno:

En RMongo este programa

library(RMongo)
mg1 <- mongoDbConnect(‘db’)
print(dbShowCollections(mg1))
query <- dbGetQuery(mg1, ‘test’, «{‘AGE’: {‘$lt’: 10}, ‘LIQ’: {‘$gte’: 0.1}, ‘IND5A’: {‘$ne’: 1}}»)
data1 <- query[c(‘AGE’, ‘LIQ’, ‘IND5A’)]
summary(data1)

genera:

En rmongodb el programa es algo más denso:

library(rmongodb)
mg2 <- mongo.create()
print(mongo.get.databases(mg2))
print(mongo.get.database.collections(mg2, ‘db’))
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, ‘AGE’)
mongo.bson.buffer.append(buf, ‘$lt’, 10)
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.start.object(buf, ‘LIQ’)
mongo.bson.buffer.append(buf, ‘$gte’, 0.1)
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.start.object(buf, ‘IND5A’)
mongo.bson.buffer.append(buf, ‘$ne’, 1)
mongo.bson.buffer.finish.object(buf)
query <- mongo.bson.from.buffer(buf)
cur <- mongo.find(mg2, ‘db.test’, query = query)
age <- liq <- ind5a <- NULL
while (mongo.cursor.next(cur)) {
value <- mongo.cursor.value(cur)
age <- rbind(age, mongo.bson.value(value, ‘AGE’))
liq <- rbind(liq, mongo.bson.value(value, ‘LIQ’))
ind5a <- rbind(ind5a, mongo.bson.value(value, ‘IND5A’))
}
mongo.destroy(mg2)
data2 <- data.frame(AGE = age, LIQ = liq, IND5A = ind5a)
summary(data2)

que genera:

Sin dudas voy a empezar por RMongo :).

Respuestas

  1. Te haré caso, probaré RMongo.

    😉

    1. Ja,ja! a ver si hablamos de una vez 🙂

Replica a Luis Miguel Gracia Cancelar la respuesta