Так что я
[{
"name":"Hanna",
"surname":"Miles"
},
{
"name":"John",
"surname":"Kenston"
}]
в моей базе данных mongo. Я получаю информацию с помощью:
my $people = $self->mongo->get_collection('persons')
Как мне получить список имен? Поэтому в этом случае мне нужно получить @result = ["Hanna", "John"]. Буду признателен за любую помощь!
Чтобы получить именно тот результат, который вам нужен, вы можете использовать карта:
my @result = [ map $_->{name}, @$people ];
Но почему вы хотите иметь анонимный массив в массиве?
my @result = map $_->{name}, @$people;
создал бы @result = qw( Hanna John )
.
Это правда, если $people
содержит ссылку на массив хеш-ссылок, как показано. Но строка кода OP подразумевает, что $people
является объектом коллекции, и в этом случае это не сработает, поскольку сначала необходимо запросить коллекцию.
@xdg: Вы правы, я полностью упустил из виду тот факт, что представленный JSON является вводом для mongo, а не выводом запроса.
Привет.
get_collection
выглядит как метод объекта базы данных для получения коллекции. Из объекта коллекции вам действительно нужно запустить запрос, который возвращает курсор, и из него вы можете выполнить итерацию для получения результатов. (Вы используете официальный драйвер MongoDB или сторонний драйвер?) Я хочу сказать, что неясно, сделали ли вы это уже, и$people
содержит результат запроса, как показано, но как написано,$people
- это не то, что вы можно просто разыменовать данные в базе данных.