【发布时间】:2020-04-01 22:05:25
【问题描述】:
我尝试在 Servant Web 服务 API 中将 persistent 与 MongoDB 一起使用。
以下是我的型号代码 (Model.hs)
let mongoSettings = (mkPersistSettings (ConT ''MongoContext))
in share [mkPersist mongoSettings, mkMigrate "migrateAll"] [persistLowerCase|
User
fam String
im String
ot String
email String
login String
pswd String
deriving Show
|]
$(deriveJSON defaultOptions ''User)
以及访问数据库的代码:
usersGet :: AppM [User]
usersGet = do
resultDB <- runDb $ do rest =<< find (select [] "user")
return resultDB
这给了我一个错误:
Error: Expected type: [User] Actual type: [Document].
我理解错误,但我认为库应该自动生成从Document -> User转换所需的函数。
为此生成的函数是什么?
【问题讨论】:
-
我发布了函数 convertDocToUser :: Document -> User convertDocToUser doc = User { userFam = typed . valueAt "userFam" $ doc , userIm = typed 。 valueAt "userIm" $ doc , userOt = typed 。 valueAt "userOt" $ doc , userEmail = typed 。 valueAt "userEmail" $ doc , userLogin = typed 。 valueAt "userLogin" $ doc , userPswd = typed 。 valueAt "userPswd" $ doc }
-
resultDB
-
但也许有更正确的方法?
-
我认为如果不知道
rest和find的类型或代码,可能很难回答这个问题。
标签: mongodb haskell persistent servant