Python mongoengine map#u将输出减少到一个新集合';不存在

Python mongoengine map#u将输出减少到一个新集合';不存在,python,django,mongodb,mapreduce,mongoengine,Python,Django,Mongodb,Mapreduce,Mongoengine,我是MongoDB和Mongoengine的初学者,我正在尝试使用Django的map_reduce功能 我正在使用以下代码对我的集合执行map reduce作业,并将结果保存到新集合: from mongengine import Document class MyClass(Document): meta = {"db_alias": "mydatabase"} ... map_f = "function() { emit(this.foo, this.bar); }" red

我是MongoDB和Mongoengine的初学者,我正在尝试使用Django的map_reduce功能

我正在使用以下代码对我的集合执行map reduce作业,并将结果保存到新集合:

from mongengine import Document

class MyClass(Document):
    meta = {"db_alias": "mydatabase"}

...

map_f = "function() { emit(this.foo, this.bar); }"
reduce_f = "function(key, values) { return values[0]; }"
output_collection_name = "mynewcollection"

result = MyClass.objects.map_reduce(map_f, reduce_f, output_collection_name)

first_mapreduce_doc = result.next()  # exception thrown
但是,这会引发“ns不存在”异常

据我所知,使用这种语法,数据库名称应该与存储“MyClass”文档的位置(存在)相同,并且应该通过此调用创建集合“mycollection”。那么到底什么是“不存在”

我做错什么了吗?我应该在打这个电话之前手动创建空集合吗

当我使用:

output_collection_name = "inline"
它工作得非常好

提前谢谢

  • Python版本:2.7
  • Django版本:1.7.1
  • MongoDB版本:2.6.7
  • MongoEngine版本:0.8.7

输出集合是否已经存在?您只能输出到已经存在的集合。我认为它会在需要时创建空集合。我浏览了MongoEngine的整个API参考,没有创建空集合的命令。如何做到这一点(不调用MongoDB命令行实用程序)?很抱歉,我对mongoengine不太熟悉。我认为你是对的,没有
create\u collection
函数,也没有运行命令的函数。您必须访问mongoengine下面的PyMongo层才能从Python创建集合。