与Yesod和MongoDB混淆。我直接使用MongoDB库,而不是使用Persistent库。
我使用this simple Yesod file server并将其转换为使用MongoDB。我正在尝试获取文档的_id
字段,但我没有得到任何结果。
我的文档有4个字段:" _id"," filename"," mime"和" content"。我可以使用!?
运算符来获取除_id之外的任何字段,它返回Nothing。
如果doc
是我的某个文档,而我$(logDebug) $ show doc
,我会将文档打印到控制台,我可以看到所有4个字段都已设置,包括_id
字段。
如果我$(logDebug) $ show $ doc !? "_id"
,我会Nothing
。
如果我$(logDebug) $ show $ head doc
,我会像_id: 12345
$(logDebug) $ show $ doc !? "filename"
会给我一个名字,比如file.txt
我在文档中没有看到_id
被特别对待的内容,所以最近有什么意思?
答案 0 :(得分:2)
看起来你试图在ghci中使用这段代码。因为没有ghci扩展的默认规则它是不可编译的。 !?
使用类型类Val
并显示使用Show
,因此doc !? "_id"
返回Val a => Maybe a
而show
需要Show a => a
。
您应该声明期望的!?
类型,例如:$(logDebug) $ show $ ((doc !? "_id") :: Maybe ObjectId)
。