Попытка получить доступ к свойству 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. Вам не нужно работать с сгенерированными.

Другие вопросы по тегам