Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
casbah mongodb访问对象参数的更类型安全的方法_Mongodb_Casbah - Fatal编程技术网

casbah mongodb访问对象参数的更类型安全的方法

casbah mongodb访问对象参数的更类型安全的方法,mongodb,casbah,Mongodb,Casbah,在casbah中,MongoDBObject中有两个名为.getAs和.getAsOrElse的方法,它们返回作为类型参数给定的类型中相关字段的值 val dbo:MongoDBObject = ... dbo.getAs[String](param) 这必须使用类型转换,因为我们可以将Long作为String获取,方法是将其作为类型参数,这可能会导致运行时出现类型转换异常。是否有其他类型安全的方法来检索结果中的原始类型 这必须是可能的,因为元素的类型信息应该存在于getAs的输出中。问题是m

在casbah中,MongoDBObject中有两个名为
.getAs
.getAsOrElse
的方法,它们返回作为类型参数给定的类型中相关字段的值

val dbo:MongoDBObject = ...
dbo.getAs[String](param)
这必须使用类型转换,因为我们可以将
Long
作为
String
获取,方法是将其作为类型参数,这可能会导致运行时出现类型转换异常。是否有其他类型安全的方法来检索结果中的原始类型


这必须是可能的,因为元素的类型信息应该存在于
getAs
的输出中。

问题是mongodb可以为单个字段存储多个类型,因此,我不确定您所说的类型安全是什么意思。没有办法在数据库端强制执行它,所以您希望有办法在casbah端强制执行它吗?为了最安全,您可以只做
get(“fieldName”)
,然后获取一个
对象
,但在我看来,这几乎不是一个改进


我很高兴使用Salat+Casbah,当我的数据库记录与Salat case类不匹配时,我会得到一个运行时异常。我只知道,当我更改模型中的类型时,或者为新类型创建新模型时,我必须运行迁移脚本(多个模型可以存储在同一个集合中)。至少Salat-grater/DAO方法可以减少麻烦(您不必每次访问变量时都指定类型)。

请查看作者的这篇优秀文章。你要找的是Salat
grater
,它可以与DBObject进行转换。

Disclamer:我有偏见,因为我是


我构建这个小型库“子集”的目的正是为了能够以类型安全的方式有效地处理
DBObject
的字段(标量和子文档)。仔细查看,看看它是否适合您的需要。

看起来很棒!它是否也能够以类型安全的方式查询外来ID(例如,在您的示例tweet中,用户不是子文档而是ObjectId)?我还没有找到解决办法。马吕斯,我不太明白你想达到什么目的。。仿真
DBRef
?。。请你打开问题,邀请我去那里,我会设法想出一个解决方案,你去吧:我完全同意沙拉+卡斯巴组合;它完全使您不必担心类型安全问题!我同意萨拉特适合我。这类似于对MongoDB进行了一些修改的JSON序列化程序。但实际上,我也使用它来生成MongoDB的JSON,以便在ElasticSearch上对其进行索引