Using R with MongoDB
Tags: mongodb, r
Published: 2017-10-28 18:01:50

---
title: "Using R with MongoDB"
published: true
tags: MongoDB,R
canonical_url: https://www.kenwalger.com/blog/nosql/mongodb/using-r-mongodb/
---

The R [programming language](https://www.r-project.org/) is a powerful language used for statistical computing. When working with statistical computing it is frequently the case that the data being explored will come from a database. Some of the powers that R excels at are working with data in tables and matrices and joining columns and rows together. This seems like a great fit for SQL databases, but what about a NoSQL database like [MongoDB](http://www.mongodb.com)? Can R analyze a MongoDB [document](https://www.kenwalger.com/blog/nosql/document-model/) as easily as a SQL table?

Well, this post would be pretty short if the answer was “No”, right? So let take a look and how to pull data into R from a MongoDB [collection](https://docs.mongodb.com/master/core/databases-and-collections/). Then we’ll take a brief look at examining our data.

### Setting Up

While there are [plugins](https://plugins.jetbrains.com/plugin/6632-r-language-support) available for a variety of IDEs, such as those by [JetBrains](https://www.jetbrains.com/), it is pretty common to use [RStudio](https://www.rstudio.com/) when working with R. That is what I’ll be using in this post and the screenshots will reflect that usage. Somewhere along the line, I picked up a “scores database in MongoDB that we’ll use as our sample data. I’ve posted it [here for download](http://kenwalger.com/public_html/assets/sample-data.zip).

We can easily import the data into our MongoDB database using [mongoimport](https://www.kenwalger.com/blog/nosql/mongodb/importing-data-mongoimport/). In my case, I put it into a database called `kenblog` and a collection called `scores`. Pretty creative, eh? Here’s what a sample document in the collection looks like:

```
{
   "_id" : ObjectId("5627207b33ff2cf40effc25e"),
   "student" : 2,
   "type" : "quiz",
   "score" : 74
}
```

There are 1,787 records in our collection with the type of assignment being either `quiz`, `essay`, or `exam`.&nbsp;Let’s see how we can access our data with R.

First, we need to get and load our package for interfacing MongoDB with R. For this example I’ll be using [RMongo](https://cran.r-project.org/web/packages/RMongo/index.html), but there is another package available, [rmongodb](https://www.r-project.org/nosvn/pandoc/rmongodb.html). Sadly it doesn’t look like there has been much in the way of current activity with either package’s GitHub repositories. Aside from that we can still connect and do some queries.

### Connecting R to MongoDB

We need to bring in our package and establish our connection:

```
require(RMongo)

mongo <- mongoDbConnect('kenblog', 'localhost', 27017)
```

In the `mongoDbConnect` method, we have options for the name of the database, server name, and port number to which we want to connect.

Next, we will want to send a query. For this example, let’s get only the `exam` data from our `scores` collection. We can use the `dbGetQuery` method for this which takes a connection object, the collection name, and the query.

```
examQuery <- dbGetQuery(mongo, 'scores', "{'type': 'exam'}")
```

This loads in all of the records from our `scores` collection of type `exam`. Let’s take the values of our exam scores and create a vector from them.

```
exam_scores <- examQuery[c('score')]
```

Nice! Now we can utilize some of the power of R to do some data analysis. Let’s get a simple summary of our data with `summary(exam_scores)`:

```
score       
 Min. : 60.00  
 1st Qu.: 72.00  
 Median : 79.00  
 Mean : 79.45  
 3rd Qu.: 86.00  
 Max. :100.00
```

Neat. I realize that this particular example could be computed using MongoDB’s powerful [aggregation framework](https://docs.mongodb.com/manual/aggregation/). However, there are times when using outside resources and languages, like R, for processing is called for.

### Wrap Up

Connecting to MongoDB from R is pretty straightforward and simple using the RMongo package. However, many of the new features that MongoDB has implemented in the last few years have not been included in the community R drivers. Further, as of this post, there isn’t an “official R driver supported by MongoDB.

R is a great statistical language and can definitely be used to query and analyze MongoDB collections. If you are using R in your work today, MongoDB is a definite option for storing your data to be analyzed.

* * *

Follow me on Twitter [@kenwalger](https://www.twitter.com/kenwalger) to get the latest updates on my postings.

There are a few MongoDB specific terms in this post. I created a [MongoDB Dictionary](https://www.echoskillstore.com/MongoDB-Dictionary/45103) skill for the [Amazon Echo](https://www.amazon.com/gp/product/B01DFKC2SO/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B01DFKC2SO&linkCode=as2&tag=kenwalgersite-20&linkId=f9e513223de2525a72b95cf9561db55b)&nbsp;line of products. Check it out and you can say “Alexa, ask MongoDB for the definition of a&nbsp;document? and get a helpful response.

[![Facebook](https://i1.wp.com/www.kenwalger.com/blog/wp-content/plugins/social-media-feather/synved-social/image/social/regular/96x96/facebook.png?resize=48%2C48&ssl=1 "Share on Facebook")](http://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fnosql%2Fmongodb%2Fusing-r-mongodb%2F&t=Using%20R%20with%20MongoDB&s=100&p%5Burl%5D=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fnosql%2Fmongodb%2Fusing-r-mongodb%2F&p%5Bimages%5D%5B0%5D=https%3A%2F%2Fi1.wp.com%2Fwww.kenwalger.com%2Fblog%2Fwp-content%2Fuploads%2F2017%2F10%2Ffeature.png%3Ffit%3D125%252C125%26ssl%3D1&p%5Btitle%5D=Using%20R%20with%20MongoDB "Share on Facebook")[![twitter](https://i0.wp.com/www.kenwalger.com/blog/wp-content/plugins/social-media-feather/synved-social/image/social/regular/96x96/twitter.png?resize=48%2C48&ssl=1 "Share on Twitter")](https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fnosql%2Fmongodb%2Fusing-r-mongodb%2F&text=Hey%20check%20this%20out "Share on Twitter")[![google_plus](https://i1.wp.com/www.kenwalger.com/blog/wp-content/plugins/social-media-feather/synved-social/image/social/regular/96x96/google_plus.png?resize=48%2C48&ssl=1 "Share on Google+")](https://plus.google.com/share?url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fnosql%2Fmongodb%2Fusing-r-mongodb%2F "Share on Google+")[![reddit](https://i1.wp.com/www.kenwalger.com/blog/wp-content/plugins/social-media-feather/synved-social/image/social/regular/96x96/reddit.png?resize=48%2C48&ssl=1 "Share on Reddit")](http://www.reddit.com/submit?url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fnosql%2Fmongodb%2Fusing-r-mongodb%2F&title=Using%20R%20with%20MongoDB "Share on Reddit")[![linkedin](https://i2.wp.com/www.kenwalger.com/blog/wp-content/plugins/social-media-feather/synved-social/image/social/regular/96x96/linkedin.png?resize=48%2C48&ssl=1 "Share on Linkedin")](http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fnosql%2Fmongodb%2Fusing-r-mongodb%2F&title=Using%20R%20with%20MongoDB "Share on Linkedin")[![mail](https://i2.wp.com/www.kenwalger.com/blog/wp-content/plugins/social-media-feather/synved-social/image/social/regular/96x96/mail.png?resize=48%2C48&ssl=1 "Share by email")](mailto:?subject=Using%20R%20with%20MongoDB&body=Hey%20check%20this%20out:%20https%3A%2F%2Fwww.kenwalger.com%2Fblog%2Fnosql%2Fmongodb%2Fusing-r-mongodb%2F "Share by email")

The post [Using R with MongoDB](https://www.kenwalger.com/blog/nosql/mongodb/using-r-mongodb/) appeared first on [Blog of Ken W. Alger](https://www.kenwalger.com/blog).