Я только начинаю работать с mongo и map / lower, и при использовании pymongo у меня возникает следующая ошибка, которую я не получаю при использовании командной строки mongo напрямую (я понимаю, что подобный вопрос этот, но мой кажется гораздо более простым).
Я использую пример непосредственно из документации по pymongo: http://api.mongodb.org/python/1.3%2B/examples/map_reduce.html
from pymongo import Connection
from pymongo.code import Code
db = Connection().map_reduce_example
db.things.insert({"x": 1, "tags": ["dog", "cat"]})
db.things.insert({"x": 2, "tags": ["cat"]})
db.things.insert({"x": 3, "tags": ["mouse", "cat", "dog"]})
db.things.insert({"x": 4, "tags": []})
m = Code("function () {this.tags.forEach(function(z) {emit('d, 1);});}")
m = Code("function () {emit('dog', 1);}")
r = Code("function (key, values) {var total = 0;for (var i = 0; i < values.length; i++) {total += values[i];}return total;}")
result = db.things.map_reduce(m, r)
Это дает мне следующую ошибку:
Traceback (most recent call last):
File "demo.py", line 17, in <module>
result = db.things.map_reduce(m, r)
File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9-py2.6-linux-i686.egg/pymongo/collection.py", line 943, in map_reduce
map=map, reduce=reduce, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9-py2.6-linux-i686.egg/pymongo/database.py", line 293, in command
msg, allowable_errors)
File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9-py2.6-linux-i686.egg/pymongo/helpers.py", line 119, in _check_command_response
raise OperationFailure(msg % response["errmsg"])
pymongo.errors.OperationFailure: command SON([('mapreduce', u'things'), ('map', Code("function () {emit('dog', 1);}", {})), ('reduce', Code('function (key, values) {var total = 0;for (var i = 0; i < values.length; i++) {total += values[i];}return total;}', {}))]) failed: db assertion failure
Однако определение функций отображения / редукции в монго и запуск следующей команды работает:
db.things.mapReduce(mm,r,{out:{inline:1}})
Кажется, что определяющей разницей является опция {out: {inline: 1}}. Есть ли способ получить это в вызов в pymongo?
Спасибо
Адам.