Попытка получить доступ к свойству upserted_id в perl Драйвер MongoDB возвращает бесполезный HASH(0x3572074)
У меня есть сценарий Perl, который извлекает таблицу из базы данных SQL (переменная $row) и пытается выполнить обновление 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)
Это настоящие идентификаторы? Если так, как мне преобразовать в шестнадцатеричную строку, которая может быть приведена к типу ObjectId Монго? Следует отметить, что я абсолютно ничего не знаю о Perl; если больше кода актуально, по запросу я выложу любой раздел как можно скорее. Его 300 строк, поэтому я не хотел включать весь файл с места.
РЕДАКТИРОВАТЬ: я должен упомянуть, прежде чем кто-либо предлагает это, что использование update_one вместо обновления возвращает точно такой же результат.
1 ответ
HASH(0x356f8fc)
ссылка на Perl Hash Это в основном какой-то (внутренний) адрес памяти некоторых данных.
Самый простой способ получить содержимое Data::Dumper
:
use Data::Dumper
[...]
my $result = $res->upserted_id;
print Dumper($result);
HASH(0x356f8fc)
это просто читаемое представление реального указателя. Выдолжны сбросить его в том же процессе и не можете передать его от одного к другому.
Вы, вероятно, в конечном итоге с чем-то вроде
`my $id = $result->{_id};`
См. Страницу руководства PerlRef для деталей.
См. Также документацию MongoDB о записи.
PS: Также помните, что вы можете использовать свои собственные идентификаторы для MongoDB. Вам не нужно работать с сгенерированными.