2016-08-31 2 views
-1

Как я могу использовать оператор MongoDB $nin в perl для подсчета credit коллекционных документов после получения списка документов из коллекции Balances?

$cr = $db->get_collection('credit'); 

$lpb = $db->get_collection('Balances'); 

$query1 = $lpb->find()-fields({ orderNo => 1, _id => 0 }); 

$query = $cr->count({ '$and' -> [ { "recieved" => "X" }, { "orderNo" => { '$nin' => '$query1' } } ] }); 

$Xnum = $query; 
+0

Несмотря на то, что возникли другие проблемы, было бы полезно, если бы вы упомянули, какую версию используемого вами драйвера MongoDB Perl вы используете. – xdg

ответ

2

Вы знаете Perl? Проблема, как представляется, простые синтаксические ошибки

Вы find()-fields, которые должны быть find()->fields, '$and' -> [, которые должны быть '$and' => [, и Вы процитировали имя переменной '$query1', которая предотвращает его от представления его содержимого

Здесь фиксируется и прибрано

Обратите внимание, что я по буквам received правильно, но нуждается в Расфиксация, если поле в базе данных имеет ту же ошибку

my $cr = $db->get_collection('credit'); 

my $lpb = $db->get_collection('Balances'); 

my $lpb_order_nums = $lpb->find->fields({ orderNo => 1, _id => 0 }); 

$query = $cr->count({ '$and' => 
    [ 
     { received => "X" }, 
     { orderNo => { '$nin' => $lpb_order_nums } } 
    ] 
}); 

my $xnum = $query; 
+0

Я получаю эту ошибку при выполнении сценария типа (MongoDB :: Cursor), необработанного по адресу /usr/lib/perl5/MongoDB/Cursor.pm, строки 156. – saber

+0

@Gagan: строка 156 текущей версии 'MongoDB/Cursor. pm' - пустая строка. Это полное и точное сообщение об ошибке, потому что для меня это не имеет смысла? – Borodin

+0

$ lbp_order_nums - это MongoDB :: Cursor, а не ссылка на массив. Для извлечения значений необходимо выполнить итерацию. Что-то вроде '$ nums = [map {$ _-> {orderNo}} $ lpb_order_nums-> all()]', а затем вы можете использовать $ nums в более позднем запросе $ nin. – xdg

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