尝试访问 upserted_id 属性 in perl MongoDB Driver returns useless HASH(0x3572074)
Attempt to access upserted_id property in perl MongoDB Driver returns useless HASH(0x3572074)
我有一个 Perl 脚本,它从 SQL 数据库($row 变量)中提取 table 并尝试像这样执行 MongoDB 更新:
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 类型的十六进制字符串?应该指出的是,我对 perl 完全一无所知;如果有更多代码相关,我会根据要求尽快 post 任何部分。它有 300 行,所以我不想立即包含整个文件。
编辑:在任何人建议使用 update_one 而不是更新 returns 之前我应该提到完全相同的结果。
HASH(0x356f8fc)
是一个 Perl 哈希引用。它基本上是一些数据的某种(内部)内存地址。
获取内容的最简单方法是Data::Dumper
:
use Data::Dumper
[...]
my $result = $res->upserted_id;
print Dumper($result);
HASH(0x356f8fc)
只是真实指针的人类可读表示。您必须将它转储到同一个进程中,不能将它从一个进程传递到另一个进程。
你可能会得到类似
的结果
`my $id = $result->{_id};`
详情见PerlRef manpage。
另见 MongoDB documentation about write concern。
PS:另外请记住,您可以将自己的 ID 用于 MongoDB。您不需要使用生成的。
我有一个 Perl 脚本,它从 SQL 数据库($row 变量)中提取 table 并尝试像这样执行 MongoDB 更新:
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 类型的十六进制字符串?应该指出的是,我对 perl 完全一无所知;如果有更多代码相关,我会根据要求尽快 post 任何部分。它有 300 行,所以我不想立即包含整个文件。
编辑:在任何人建议使用 update_one 而不是更新 returns 之前我应该提到完全相同的结果。
HASH(0x356f8fc)
是一个 Perl 哈希引用。它基本上是一些数据的某种(内部)内存地址。
获取内容的最简单方法是Data::Dumper
:
use Data::Dumper
[...]
my $result = $res->upserted_id;
print Dumper($result);
HASH(0x356f8fc)
只是真实指针的人类可读表示。您必须将它转储到同一个进程中,不能将它从一个进程传递到另一个进程。
你可能会得到类似
的结果`my $id = $result->{_id};`
详情见PerlRef manpage。
另见 MongoDB documentation about write concern。
PS:另外请记住,您可以将自己的 ID 用于 MongoDB。您不需要使用生成的。