使用mongoengine进入mongodb的多文档插入

时间:2013-02-28 18:58:11

标签: python mongodb flask mongoengine

在我的烧瓶应用程序中,我使用的是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)
两个都失败了。请帮忙。

2 个答案:

答案 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)