Using MongoDB queries in Haskell
MongoDB is a nonrelational schemaless database. In this recipe, we will obtain all data from MongoDB into Haskell.
Getting ready
We need to install MongoDB on our local machine and have a database instance running in the background while we run the code in this recipe.
MongoDB installation instructions are located at http://www.mongodb.org. On Debian-based operating systems, we can use apt-get
to install MongoDB, using the following command line:
$ sudo apt-get install mongodb
Run the database daemon by specifying the database file path as follows:
$ mkdir ~/db $ mongod --dbpath ~/db
Fill up a "people"
collection with dummy data as follows:
$ mongo > db.people.insert( {first: "Joe", last: "Shmoe"} )
Install the MongoDB package from Cabal using the following command:
$ cabal install mongoDB
How to do it...
- Use the
OverloadedString
andExtendedDefaultRules
language extensions to make the MongoDB library easier to use:{-# LANGUAGE OverloadedStrings, ExtendedDefaultRules #-} import Database.MongoDB
- Define and implement
main
to set up a connection to the locally hosted database. Run MongoDB queries defined in therun
function as follows:main :: IO () main = do let db = "test" pipe <- runIOE $ connect (host "127.0.0.1") e <- access pipe master db run close pipe print e
- In
run
, we can combine multiple operations. For this recipe,run
will only perform one task, that is, gather data from the"people"
collection:run = getData getData = rest =<< find (select [] "people") {sort=[]}
How it works...
A pipe is established by the driver between the running program and the database. This allows running MongoDB operations to bridge the program with the database. The find
function takes a query, which we construct by evoking the select :: Selector -> Collection -> aQueryOrSelection
function.
Other functions can be found in the documentation at http://hackage.haskell.org/package/mongoDB/docs/Database-MongoDB-Query.html.
See also
If the MongoDB database is on a remote server, refer to the Reading from a remote MongoDB server recipe to set up a connection with remote databases.