MongoDB Mapa / Reducir excepción aumento: error de aserción db: no
Pregunta
He creado map / reduce las funciones a las tareas de grupo resulta en un objeto del resultado. He escrito en Python con el uso de la biblioteca pymongo:
m = Code("""function() {
data = {};
res = ''
if(this.result_id) {
res={'objectid':this.result_id.toString()};
} else {
res=this.result;
}
emit(this.data, res);
}""")
r = Code("""function(k,values) {
data={};
for(var i=0; i<values.length; i++ ) {
for(attr in values[i])
data[attr]=values[i][attr];
}
return data
}""")
Y necesito que sea objeto de resultado en el mismo orden que las tareas de entrada de consultas. Pero cuando se utiliza parámetro tipo de solicitud:
res = db.tasks.map_reduce(m, r, query={'job_id':job_id},sort={'position':pymongo.ASCENDING})
Sin embargo, esta excepción aumento en mongodb:
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/gevent/greenlet.py", line 403, in run
result = self._run(*self.args, **self.kwargs)
File "/data/www/public/app/seotools/daemon/scripts/mainconverter.py", line 129, in work
res = autoreconnect(self.db.tasks.map_reduce,m, r, query={'job_id':job_id},sort={'position':1})
File "/data/www/public/app/seotools/daemon/lib/db/mongo.py", line 95, in autoreconnect
result = func(*args,**kwargs)
File "/usr/local/lib/python2.6/dist-packages/pymongo-1.8.1-py2.6-linux-x86_64.egg/pymongo/collection.py", line 945, in map_reduce
map=map, reduce=reduce, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/pymongo-1.8.1-py2.6-linux-x86_64.egg/pymongo/database.py", line 294, in command
(command, result["errmsg"]))
OperationFailure: command SON([('mapreduce', u'tasks'), ('sort', {'position': 1}), ('query', {'job_id': ObjectId('4d0b30909c7684b60e000000')}), ('reduce', Code('function(k,values) {
data={};
for(var i=0; i<values.length; i++ ) {
for(attr in values[i])
data[attr]=values[i][attr];
}
return data
}', {})), ('map', Code("function() {
data = {};
res = ''
if(this.result_id) {
res={'objectid':this.result_id.toString()};
} else {
res=this.result;
}
emit(this.data, res);
}", {}))]) failed: db assertion failure
Cuando uso la misma consulta sin parámetro para ordenar:
res = db.tasks.map_reduce(m, r, query={'job_id':job_id})
Es un trabajo bastante bien.
¿Dónde puede ser el problema?
Solución
He encontrado mi problema. Como fue dicho por uno de los desarrolladores, que no podemos utilizar la clasificación sin índices. Así que si usa la clasificación, en primer lugar debe crear un índice para que la clasificación.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow