2015-05-22 2 views
0

У меня есть коллекция «книга»:MongoDB водитель Perl: другой результат после агрегации

{ 
"_id" : ObjectId("54901b078b823f2014080700"), 
"title" : "title1", 
"available" : 0, 
"time" : 14318789245, 
"score" : 1, 
"categories" : ["fiction","humor"] 
}, 
{ 
"_id" : ObjectId("54901b078b823f2014080701"), 
"title" : "title2", 
"available" : 1, 
"time" : 14318789745, 
"score" : 1, 
"score_fiction": 5, 
"categories" : ["fiction",] 
} 
... 
{ 
"_id" : ObjectId("54901b078b823f2014080751"), 
"title" : "titleN", 
"available" : 1, 
"time" : 14318789545, 
"score" : 4, 
"score_fiction": 2, 
} 

Я агрегировать его с помощью этого сценария:

my $books = $mango->db('test')->collection('books')->aggregate([ 
    {'$match' => {categories => fiction}}, 
    {'$project' => 
    { 
    'av' => {'$cmp' => ['$available', 0] }, 
    title => 1, 
    scr => {'$ifNull' => ['$score_fiction' , '$score'] }, 
    time =>1} 
    }, 
{'$sort' => {av => -1, scr => -1, time => -1}}, 
{'$limit' => 10} 
]); 

while (my $book = $books->next) { 
    print $book->{title} . " [" . $book->{scr} . "]\n"; 

После 5-7 пробегов я получаю два различных результата :

  • С сортировкой по обязательным полям.
  • Без сортировки. (возможно, с сортировкой по времени или «$ natural»
    время добавления).

Когда я запускаю этот конвейер агрегации в оболочке монго - он работает с правильной сортировкой.

db.books.aggregate([{'$match' : {categories : 'fiction'}, 
    {'$project' : {'av' : {'$cmp' : ['$available', 0] }, 
    title : 1, 
    scr : {'$ifNull' : ['$score_fiction' , '$score'] }, 
    time:1}}, 
    {'$sort' : {av : -1,scr :-1, time : -1}}, 
    {'$limit': 10}]); 

Проблема в драйвере или в голове?

PS Я пробовал Mango и официальный драйвер MongoDB, но результат тот же.

+0

Вы фактически вставив одиночные кавычки переменные, такие как ' '$ project'', или в том, что артефакт вашему примеру? Потому что они не интерполируют. –

+0

Да. Он одинарный. Это строки - операторы для MongoDB – Spear5030

ответ

0

{ '$ рода' => {ау => -1, экр => -1, время => -1}},

Это, вероятно, будет проблемой, если вы на недавний perl, который рандомизирует хэш-порядок. Предложение sort должно быть упорядоченным документом . См. https://metacpan.org/pod/Mango::BSON#bson_doc, как для сделать это.

(с) от https://github.com/dagolden

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