7

Monger ライブラリを使用して Clojure から Mongo データベースにアクセスしています。私を悩ませているのは、ObjectId インスタンスと文字列の間を行き来することです。

たとえば、このコードは、エントリ(mc/find-maps "posts" {})の値がクラスのインスタンスに設定されたマップに評価されますが、私のアプリでは、一意であることがわかっている文字列として単純に持つ方が便利です。_idObjectId

一方、次のような式の場合:パラメータに(mc/find-map-by-id "posts" (new ObjectId id))String オブジェクトをid使用する場合、それを使用して のインスタンスを作成する必要がありますObjectId

_idアプリケーションの Strings と mongo 側の ObjectId の間で convert の値を自動的かつ透過的に作成する方法はありますか? 有効にすると、id の文字列表現を使用してマップを作成し、その逆も同様に、クエリでパラメーターとして使用するときに id t オブジェクト id の文字列表現を変換するある種のオプションはありますか?

そうでない場合、他にどのような戦略が利用可能ですか?

4

2 に答える 2

1

この点であなたの痛みを分かち合います。ObjectID を元に戻すのは厄介です。なぜなら、常に変換を行ったり来たりしなければならず、忘れるとバグを見つけるのが難しいからです。

最適な方法は、ドライバー コードをラップして変換を自動的に行うことです。したがって、find、findOne、insert を、タイプを調べて、出入りするかどうかにかかわらず自動的に変換を行うシン ラッパーに置き換えます。

残念ながら、これ以上簡単な方法はないと思います。

于 2012-07-13T17:57:49.830 に答える