在我的烧瓶应用程序中,我使用的是MongoeEgine。我正在尝试将多个文档插入到我的MongoDB中的places集合中。
我的文档类定义为
class places(db.Document):
name = db.StringField(max_length=200, required=True)
loc = db.GeoPointField(required=True)
def __unicode__(self):
return self.name
a=[]
a.append({"name" : 'test' , "loc":[-87,101]})
a.append({"name" : 'test' , "loc":[-88,101]})
x= places(a)
最后一句话失败
x= places(a)
TypeError: __init__() takes exactly 1 argument (2 given)
我也尝试将其保存到我的实例
places.insert(x)
places.save(x)
两个都失败了。请帮忙。
答案 0 :(得分:30)
Places.objects.insert
没有列出必须为Places
个实例的字典。正常操作是创建Places
的单个实例并保存或插入例如:
Places(name="test", loc=[-87, 101]).save()
Places(name="test 2", loc=[-87, 101]).save()
但是,如果您要进行批量插入,则可以传递Places
个实例列表,并在insert
查询集上调用objects
,例如:
Places.objects.insert([Places(name="test", loc=[-87, 101]),
Places(name="test 2", loc=[-87, 101])])
答案 1 :(得分:7)
您尝试一次初始化多个文档的文档对象。
如果你看一下mongoengine的 BaseDocument 类,你会看到它的__init__
方法接受一个关键字参数的字典,它与一个文档的字段有关。
如果您想进行批量保存,则必须列出地方实例并将其传递给 insert()方法。
a = []
a.append(places(**{"name": 'test', "loc": [-87,101]}))
a.append(places(**{"name": 'test', "loc": [-88,101]}))
x = places.objects.insert(a)