sql >> Base de Datos >  >> NoSQL >> MongoDB

Scotty usando MongoDB

mongoDB es lo suficientemente genérico para funcionar en cualquier mónada que sea una instancia de MonadBaseControl IO y MonadIO .

Por ejemplo, puede elegir IO monada. En este caso, necesita liftIO . runQuery dentro de la acción de scotty:

import Web.Scotty
import Database.MongoDB
import qualified Data.Text.Lazy as T
import Control.Monad.IO.Class

runQuery :: Pipe -> Query -> IO [Document]
runQuery pipe query = access pipe master "nutrition" (find query >>= rest) 

main = do
  pipe <- connect $ host "127.0.0.1"
  scotty 3000 $ do
    get "/" $ do
      res <- liftIO $ runQuery pipe (select [] "stock_foods")
      text $ T.pack $ show res

Después de @Sebastian Philipp agregado MonadBaseControl instancia para Scotty.ActionT , no hay necesidad de levantar nada. Puede trabajar de forma transparente con mongoDB desde scotty. Simplemente cambie la firma de tipo y suelte liftIO s:

runQuery :: Pipe -> Query -> ActionM [Document]
...
    get "/" $ do
      res <- runQuery pipe (select [] "stock_foods")
      text $ T.pack $ show res