2013-01-31 5 views
0

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

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

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

спасибо.

Edit: Это не работает слишком:

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

Чтобы помочь нам лучше ответить, вы должны были показать нам, что запрос корректно работает в оболочке mongo, и доказал, что у вас есть два документа с данными ObjectIds. –

ответ

15

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

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

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

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

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

+0

Спасибо за ваш ответ, но я уже пытаюсь, и он не работает. Я думаю, что это проблема с драйвером mongoDB, но я не уверен на 100%: s – Toin3

+8

Я серьезно сомневаюсь, что это проблема с драйвером Perl, так как я его поддерживаю. Я могу запросить ObjectID с указанным выше синтаксисом, и он работает так, как ожидалось. – friedo

+0

Окончательно, он работает, как вы говорите в своем ответе, но я не знаю почему сейчас, а не раньше. – Toin3

Смежные вопросы