Оператор $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( ... )