我是 Haskell 的初学者,我倾向于边做边学。
有人可以为我提供一个如何将光标与 nextBatch 或 nextN 一起使用的示例吗? http://hackage.haskell.org/packages/archive/mongoDB/1.3.1/doc/html/Database-MongoDB-Query.html#g:12
尝试过这样的事情(我试图编写一个自定义迭代函数,其中 f 是我想映射到所有文档的函数)
let cursor = Mdb.find (Mdb.select selector collection)
-- consume :: IO ()
consume = do
r <- runAction db $ Mdb.nextBatch =<< cursor
if length (fromRight r) == 0
then return ()
else do
mapM_ f (fromRight r)
consume
consume
现在它在无限循环中运行,总是返回相同的文档集。我猜光标永远不会被修改?游标类型本身有一个 MVar 作为它的元素之一,首先我认为当我执行 nextBatch 时会更新它,但这从未发生过。
也许我应该重写它留在 Action monad 中的递归方式(参见 mongo 驱动程序),而不是 IO?我被困住了。