2014-09-22 6 views
0

Я хочу использовать Mongoid для реализации 'GROUP BY' The Funcation запрос любит, но я поймал исключение:Mongoid бросить 16052 исключение

failed with error 16052: "exception: could not create cursor over th_test.messages for query : { sr_flag: /.*541260c5aee1a93f70000001.*/ } sort : { created_at: -1 }" 

Мой код здесь:

def messages 
    map = %Q{ 
     function() { 
     emit(this.sr_flag, { count: 1 }); 
     } 
    } 

    reduce = %Q{ 
     function(key, values) { 
     var result = { count: 0 }; 
     values.forEach(function(value) { 
      result.count += value.count; 
     }); 
     return result; 
     } 
    } 

    result = Message.where(sr_flag: /.*#{self.id}.*/).map_reduce(map, reduce).out(inline: true).to_a 
    result 
end 
Может

кто-то помогите мне объяснить, почему? Я искал blog. Как монгоид задал столбец created_at как первичный ключ?

+0

Нет, это говорит вам, что вы пытаетесь проверить поле типа ObjectId с регулярным выражением, которое вы не можете сделать. Вместо этого используйте тип ObjectId. –

+0

Спасибо, но я так не думаю, и я получил результат с 'Message.where (sr_flag: /.*# {self.id}. * /)', Поэтому я думаю, что это правильно. Даже я использую «Сообщение». map_reduce (map, reduce) .out (inline: true) .to_a ", есть и это исключение. – Devin

ответ

1

Я исправил свою проблему. Причина заключалась в том, что кто-то нарушил default_scope для моей модели сообщений, но the column sorted on was not the key column of the map method. Просто используйте метод unscoped для работы программы.

result = Message.unscoped.where(sr_flag: /.*#{self.id}.*/).map_reduce(map, reduce).out(inline: true).to_a 
Смежные вопросы