Оператор $in mongoDB с _id в perl

Я пытаюсь выполнить этот запрос с Perl в базе данных MongoDB:

$db->$collection->find({"_id" : { "$in" : ["4f520122ecf6171327000137", "4f4f49c09d1bd90728000034"]}});

Но он ничего не возвращает и должен вернуть два документа. Что не так с этим запросом?

Спасибо.

Редактировать: это тоже не работает:

$db->$collection->find( {_id => "4f520122ecf6171327000137"} );

1 ответ

Решение

Во-первых, убедитесь, что вы используете правильный синтаксис. Ваш первый пример не является допустимым кодом Perl, так как вы включаете кусок JSON в качестве параметра запроса.

Во-вторых, предполагая, что значения этих идентификаторов являются объектными идентификаторами MongoDB, вам необходимо создать объекты OID, чтобы отличать их от обычных строк. И обязательно используйте одинарные кавычки ('') вокруг $inиначе Perl попытается интерполировать $in как переменная (в которой, по-видимому, ничего нет).

Поэтому я предполагаю, что вы хотите сделать что-то вроде этого:

$db->$collection->find( {
    "_id" => { 
        '$in' => [ MongoDB::OID->new( value => "4f520122ecf6171327000137" ), 
                   MongoDB::OID->new( value => "4f4f49c09d1bd90728000034" )
                 ]
             } 
} );

Изменить: Кроме того, использование автозагрузки имен методов для извлечения коллекций уже давно устарело. Вам лучше использовать $db->get_collection( "collection name" )->find( ... )

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