Make examples compilable
This commit is contained in:
parent
20bd38d712
commit
1e861c2496
3 changed files with 12 additions and 11 deletions
|
@ -3,13 +3,12 @@ Client interface to MongoDB database management system.
|
||||||
|
|
||||||
Simple example below. Use with language extensions /OvererloadedStrings/ & /ExtendedDefaultRules/.
|
Simple example below. Use with language extensions /OvererloadedStrings/ & /ExtendedDefaultRules/.
|
||||||
|
|
||||||
> {-# LANGUAGE OverloadedStrings, ExtendedDefaultRules #-}
|
|
||||||
>
|
|
||||||
> import Database.MongoDB
|
> import Database.MongoDB
|
||||||
> import Control.Monad.Trans (liftIO)
|
> import Control.Monad.Trans (liftIO)
|
||||||
>
|
>
|
||||||
> main = do
|
> main = do
|
||||||
> pipe <- runIOE $ connect (host "127.0.0.1")
|
> pipe <- connect (host "127.0.0.1")
|
||||||
> e <- access pipe master "baseball" run
|
> e <- access pipe master "baseball" run
|
||||||
> close pipe
|
> close pipe
|
||||||
> print e
|
> print e
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
{-# LANGUAGE OverloadedStrings, ExtendedDefaultRules #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE ExtendedDefaultRules #-}
|
||||||
|
|
||||||
|
module Main (main) where
|
||||||
|
|
||||||
import Database.MongoDB (Action, Document, Document, Value, access,
|
import Database.MongoDB (Action, Document, Document, Value, access,
|
||||||
close, connect, delete, exclude, find,
|
close, connect, delete, exclude, find,
|
||||||
host, insertMany, master, project, rest,
|
host, insertMany, master, project, rest,
|
||||||
runIOE, select, sort, (=:))
|
select, sort, (=:))
|
||||||
import Control.Monad.Trans (liftIO)
|
import Control.Monad.Trans (liftIO)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
pipe <- runIOE $ connect (host "127.0.0.1")
|
pipe <- connect (host "127.0.0.1")
|
||||||
e <- access pipe master "baseball" run
|
e <- access pipe master "baseball" run
|
||||||
close pipe
|
close pipe
|
||||||
print e
|
print e
|
||||||
|
|
|
@ -11,8 +11,7 @@ To start, we'll insert some example data which we can perform map/reduce queries
|
||||||
Prelude> :set prompt "> "
|
Prelude> :set prompt "> "
|
||||||
> :set -XOverloadedStrings
|
> :set -XOverloadedStrings
|
||||||
> import Database.MongoDB
|
> import Database.MongoDB
|
||||||
> import Data.CompactString () -- only needed when using ghci
|
> pipe <- connect $ host "127.0.0.1"
|
||||||
> pipe <- runIOE $ connect $ host "127.0.0.1"
|
|
||||||
> let run act = access pipe master "test" act
|
> let run act = access pipe master "test" act
|
||||||
> let docs = [ ["x" =: 1, "tags" =: ["dog", "cat"]], ["x" =: 2, "tags" =: ["cat"]], ["x" =: 3, "tags" =: ["mouse", "cat", "dog"]] ]
|
> let docs = [ ["x" =: 1, "tags" =: ["dog", "cat"]], ["x" =: 2, "tags" =: ["cat"]], ["x" =: 3, "tags" =: ["mouse", "cat", "dog"]] ]
|
||||||
> run $ insertMany "mr1" docs
|
> run $ insertMany "mr1" docs
|
||||||
|
@ -34,14 +33,14 @@ Note: We can't just return values.length as the reduce function might be called
|
||||||
Finally, we run mapReduce, results by default will be return in an array in the result document (inlined):
|
Finally, we run mapReduce, results by default will be return in an array in the result document (inlined):
|
||||||
|
|
||||||
> run $ runMR' (mapReduce "mr1" mapFn reduceFn)
|
> run $ runMR' (mapReduce "mr1" mapFn reduceFn)
|
||||||
Right [ results: [[ _id: "cat", value: 3.0],[ _id: "dog", value: 2.0],[ _id: "mouse", value: 1.0]], timeMillis: 379, counts: [ input: 4, emit: 6, reduce: 2, output: 3], ok: 1.0]
|
[ results: [[ _id: "cat", value: 3.0],[ _id: "dog", value: 2.0],[ _id: "mouse", value: 1.0]], timeMillis: 379, counts: [ input: 4, emit: 6, reduce: 2, output: 3], ok: 1.0]
|
||||||
|
|
||||||
Inlining only works if result set < 16MB. An alternative to inlining is outputing to a collection. But what to do if there is data already in the collection from a previous run of the same MapReduce? You have three alternatives in the MRMerge data type: Replace, Merge, and Reduce. See its documentation for details. To output to a collection, set the `rOut` field in `MapReduce`.
|
Inlining only works if result set < 16MB. An alternative to inlining is outputing to a collection. But what to do if there is data already in the collection from a previous run of the same MapReduce? You have three alternatives in the MRMerge data type: Replace, Merge, and Reduce. See its documentation for details. To output to a collection, set the `rOut` field in `MapReduce`.
|
||||||
|
|
||||||
> run $ runMR' (mapReduce "mr1" mapFn reduceFn) {rOut = Output Replace "mr1out" Nothing}
|
> run $ runMR' (mapReduce "mr1" mapFn reduceFn) {rOut = Output Replace "mr1out" Nothing}
|
||||||
Right [ result: "mr1out", timeMillis: 379, counts: [ input: 3, emit: 6, reduce: 2, output: 3], ok: 1.0]
|
[ result: "mr1out", timeMillis: 379, counts: [ input: 3, emit: 6, reduce: 2, output: 3], ok: 1.0]
|
||||||
|
|
||||||
You can now query the mr1out collection to see the result, or run another MapReduce on it! A shortcut for running the map-reduce then querying the result collection right away is `runMR`.
|
You can now query the mr1out collection to see the result, or run another MapReduce on it! A shortcut for running the map-reduce then querying the result collection right away is `runMR`.
|
||||||
|
|
||||||
> run $ rest =<< runMR (mapReduce "mr1" mapFn reduceFn) {rOut = Output Replace "mr1out" Nothing}
|
> run $ rest =<< runMR (mapReduce "mr1" mapFn reduceFn) {rOut = Output Replace "mr1out" Nothing}
|
||||||
Right [[ _id: "cat", value: 3.0],[ _id: "dog", value: 2.0],[ _id: "mouse", value: 1.0]]
|
[[ _id: "cat", value: 3.0],[ _id: "dog", value: 2.0],[ _id: "mouse", value: 1.0]]
|
||||||
|
|
Loading…
Reference in a new issue