gpt4 book ai didi

mapreduce - pymongo mapreduce 数据库断言失败

转载 作者:行者123 更新时间:2023-12-01 23:25:46 27 4
gpt4 key购买 nike

我刚刚开始使用 mongo 和 map/reduce,在使用 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

但是,在 mongo 中定义 map/reduce 函数并运行以下命令是可行的:

db.things.mapReduce(mm,r,{out:{inline:1}})

决定性的区别似乎是 {out:{inline:1}} 选项。有没有办法让它进入 pymongo 的调用?

谢谢,

亚当。

最佳答案

问题与“out”参数有关。从 MongoDB 1.7.4 开始,需要“out”参数,调用 map_reduce 时必须始终指定输出集合的名称。

result = db.things.map_reduce(m, r, "output_collection_name")

如果您想在内存中执行整个 MapReduce 操作,请改为调用 inline_map_reduce。

result = db.things.inline_map_reduce(m, r)

以上示例仅适用于直接从 git 存储库获取的最新版本的 pymongo。 pymongo 1.9 不适用于 MongoDB 1.7.4 或更高版本。

关于mapreduce - pymongo mapreduce 数据库断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5462645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com