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

Scotty bruger MongoDB

mongoDB er generisk nok til at fungere i enhver monade, der er forekomst af MonadBaseControl IO og MonadIO .

For eksempel kan du vælge IO monade. I dette tilfælde skal du bruge liftIO . runQuery inde i scottys handling:

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

Efter @Sebastian Philipp tilføjet MonadBaseControl instans for Scotty.ActionT , er der ingen grund til at løfte noget. Du kan gennemsigtigt arbejde med mongoDB fra scotty. Bare skift typesignatur og slip liftIO s:

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



  1. Sådan rydder du konsol i MongoDB

  2. MongoCommandException:Kommando mislykkedes med fejl 8000 (AtlasError):'intet SNI-navn sendt, sørg for at bruge en MongoDB 3.4+ driver/shell.'

  3. Skinner mongoide regex på et heltalsfelt

  4. Hvad er forskellen mellem $near og $nearSphere i Mongo?