「RMongo」パッケージを使って、
mongoDBのデータを触っている時に、
ObjectID でデータを参照して操作する方法が分かるまでに時間がかかってしまったので、
まとめておきます。
やりたい操作
mongo では、ドキュメントと呼ばれる
データレコードが1つのデータの単位になっています。
このドキュメントには、それぞれ、"_id" というフィールドが割り当てられて、
識別番号が与えられます。
{"_id" : ObjectId("~~~~~~~"), "field1" : ......}
データを一覧で表示すると、
上のような感じで、一つ一つのドキュメントに、
ユニークな番号が与えられていることが分かります。
重複したドキュメントを削除したい場合のように、
この識別番号でしか識別できない状況があるので、
"_id"で指定してドキュメントの操作を行いたいことがあります。
通常であれば、データの削除は、
mongo.remove(mongo,"db.collection",list(field=value))
のように、field名と、その値(value)を指定して削除できますが、
"_id"の場合はこれではできません。
ObjectID で指定する場合は、oid データとして指定する
RMongo の中では、"_id" だけは特別なデータになっていて、
oid データとして扱う必要があります。
そのため、単に文字列で識別番号を扱うのではなく、
文字列からoidに変換する必要があります。
文字列からoidへの変換
変換は、次のように行います。
oid = mongo.oid.from.string("24桁のObjectID")
引数に文字列でObjectIDを与えることで、
oid形式の形式に変換されたIDのデータを得ることができます。
データの指定
上の変換を通すと、通常のデータの指定と同じように指定できます。
例えば、指定したObject ID のデータを削除する場合、
field名は、"_id"をそのまま指定して、
mongo.remove(mongo,ns,"_id"=oid)
で削除が可能です。
oid
には上の変換後のデータを指定します。
まとめ
分かると単純なことですが、
一つだけ特別扱いになると、
結構とドツボにハマってしまいますね。