2012-07-13 142 views
7

我正在使用Monger库从Clojure访问Mongo数据库。有一件让我恼火的事情是在ObjectId实例和字符串之间来回切换。将Mongodb ObjectId自动映射到字符串和从字符串映射

例如,该代码(mc/find-maps "posts" {})将评估到的地图,_id项设置为ObjectId类的实例,而在我的应用我觉得更有用简单地把它作为一个字符串,我知道它的价值是独特的。

另一方面,对于像(mc/find-map-by-id "posts" (new ObjectId id))这样的表达式,我使用String对象作为参数id,我必须用它来构造一个ObjectId的实例。

有没有办法让_id的值在应用程序中的字符串和mongo端的ObjectId之间自动,透明地转换?某些选项在启用时会创建带有字符串表示形式的映射,反之亦然可以在查询中用作参数时转换对象id的字符串表示形式?

如果不是,还有哪些其他策略可用?

回答

2

我分享你在这一点上的痛苦。取回ObjectID是很烦人的,因为你总是不得不来回转换,如果你忘记了,那么很难发现bug。

最好的办法可能是自动包装驱动程序代码进行转换。因此,使用一个小型包装器替换find,findOne,插入,查看类型并自动进行转换,无论您是进入还是出来。

不幸的是,我不认为有一个更简单的方法。