ファイルを読み取り、その情報をmongoldbコレクションに保存するプログラムを作成しようとしています。このプログラムは、mongodbドライバのサンプルプログラムに基づいています。 テストのために、私はtestdatenでいくつかの定数を定義し、プログラムはこのデータで動作します。 STMTでは、すなわち、insertMany
の第2引数には、実際のタイプIO [[Data.Bson.Field]]
でgetWetterDaten
をHaskell Mongodbファイルからレコードを挿入する
insertMany「DATEN」getWetterDaten 予想と一致しませんでしタイプ[Document]
:私は、ファイルデータを挿入しようとすると、私は型エラーを取得しますdo
ブロックの:insertMany "daten" getWetterDaten
私はこの問題は、そのtestdatenがType testDaten :: [[Data.Bson.Field]]
とgetWetterDaten
Type getWetterDaten :: IO [[Data.Bson.Field]]
、 を持っていますが、どのように私はこの問題を解決することができますを持っていることを知っていますか?
私はメッセージを取得insertData2
にパラメータとしてデータを渡すためにしてみてください。
Couldn't match type ‘Control.Monad.Trans.Reader.ReaderT
Database.MongoDB.Query.MongoContext m1 [Value]’
遠くハスケルの私の理解を超えて間違いです。
別の観察は、私は型宣言 を含めるようにしようと、私はエラーメッセージを取得することである:
Not in scope: type constructor or class `Data.Bson.Field`
のMongoDBへのファイルのデータを挿入するための正しい方法は何ですか?
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
module TestModule where
import Database.MongoDB (Action, Document, Document, Value, access,
close, connect, delete, exclude, find,
host, insertMany, master, project, rest,
select, sort, (=:))
main :: IO()
main = do
wetterDaten <- getWetterDaten
pipe <- connect (host "127.0.0.1")
e <- access pipe master "wetter2017" run
close pipe
print e
--run :: Action IO()
run = do
clearData
insertData
return()
clearData :: Action IO()
clearData = delete (select [] "daten")
--insertData :: Action IO [Value]
insertData = do
**insertMany "daten" testDaten**
insertData2 :: Action IO [Value]
insertData2 = do
**insertMany "daten" getWetterDaten**
testDaten = [["data" =: "Zeile0"],["data" =: "Zeile1"],
["data" =: "Zeile2"],["data" =: "Zeile3"]]
getWetterDaten = do
fileContents <- fmap lines $ readFile "data.txt"
let wetterDaten = map makeMongo fileContents
return wetterDaten
makeMongo x = [ "data" =: x]
2番目のエラーは簡単です - あなたのインポートリストに 'Field'を追加します。最初は完全なエラーではありません(ghcは非常に大きなエラーを表示しますが、実際にすべてを読むと非常に正確で有益です)ので、どこから来たのかは分かりませんが、 'lift getWetterDaten >> = insertMany" daten "のようなものが必要です。もちろん、これは 'insert'を実行するたびにファイルを読み込みます。おそらくあなたが望むものではありません。 – user2407038
ありがとうございましたliftM getWetterDaten >> = insertMany "daten3"を試しましたが、エラーが発生しました:予想される型 'Control.Monad.Trans.Reader.ReaderTと一致しませんでした Database.MongoDB.Query.MongoContext IO [Document]' 実際のタイプ 'm0 a10 - > m0 r0' 考えられる原因: 'liftM'はあまりにも少ない引数に適用されます '(>> =)'の最初の引数、つまり 'liftM getWetterDaten – Ralli