私はSQLデータベース($行変数)から、テーブルなどのようにMongoDBのアップデートを行うための試みを引っ張るPerlスクリプトを持っている:perlのMongoDBのドライバでupserted_idプロパティにアクセスしようとしましたが、無用HASHを返します(0x3572074)
my $res = $users->update({"meeting_id" => $row[0]},
{'$set' => {
"meeting_id" => $row[0],
"case_id" => $row[1],
"case_desc" => $row[2],
"date" => $row[3],
"start_time" => $row[4],
"end_time" => $row[5],
#"mediator_LawyerID" => $row[6],
"mediator_LawyerIDs" => \@medLawIds,
"case_number" => $row[6],
"case_name" => $row[7],
"location" => $row[8],
"number_of_parties" => $row[9],
"case_manager" => $row[10],
"last_updated" => $row[11],
"meeting_result" => $row[12],
"parties" => \@partyList
}},
{'upsert' => 1}) or die "I ain't update!!!";
私のクライアントは、ICSスタイルのカレンダー招待状をメディエータに送信したいと考えています。したがって、更新や挿入が行われたかどうかを知る必要があります。 MongoDBのためのドキュメント:: UpdateResultが、これはあなたがそのようなプロパティにアクセスする方法であることを意味します
my $id = $res->upserted_id;
だから私は試してみました:
bless ($res,"MongoDB::UpdateResult");
my $id = $res->upserted_id;
このコードの$ idはのようなものです後:
HASH(0x356f8fc)
これらは実際のIDですか?もしそうなら、MongoのObjectId型にキャストできる16進文字列に変換するには?私はperlについては何も知りません。より多くのコードが関連している場合は、要求に応じてすぐにセクションを投稿します。その300行、私はバットからファイル全体を含めることを望んでいませんでした。
EDIT:updateの代わりにupdate_oneを使用すると、まったく同じ結果が返されることを誰かが先に述べる必要があります。
upsert文が更新または挿入を行ったかどうかを確認する方法がありますか? – awimley
このソリューションは、ハッシュを正しくチェックします。$ VAR1 = undefを返します。 – awimley
MongoDBの結果( '$ res')もダンプすることをお勧めします。それ以外の場合は、並列ではなく連続してフィードする場合は、最初に失敗した場合は、最も可能性の高い操作(たとえば、挿入)を行い、もう一方(たとえば、更新)にフォールバックします。 – Sebastian