MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Scotty usando MongoDB

mongoDB è abbastanza generico da funzionare in qualsiasi monade che sia istanza di MonadBaseControl IO e MonadIO .

Ad esempio, puoi scegliere IO monade. In questo caso è necessario liftIO . runQuery all'interno dell'azione di 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

Dopo @Sebastian Philipp aggiunto MonadBaseControl esempio per Scotty.ActionT , non è necessario sollevare nulla. Puoi lavorare in modo trasparente con mongoDB form scotty. Basta cambiare la firma del tipo e rilasciare liftIO s:

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