MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Scotty utilise MongoDB

mongoDB est suffisamment générique pour fonctionner dans n'importe quelle monade qui est une instance de MonadBaseControl IO et MonadIO .

Par exemple, vous pouvez choisir IO monade. Dans ce cas, vous avez besoin de liftIO . runQuery dans l'action 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

Après @Sebastian Philipp ajouté MonadBaseControl instance pour Scotty.ActionT , il n'est pas nécessaire de soulever quoi que ce soit. Vous pouvez travailler de manière transparente avec le formulaire mongoDB scotty. Changez simplement la signature de type et supprimez liftIO s :

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