21

私のフラスコアプリでは、MongoeEgine を使用しています。MongoDB の場所コレクションに複数のドキュメントを挿入しようとしています。

私のドキュメントクラスは次のように定義されています

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)

どちらも失敗します。助けてください。

4

2 に答える 2

36

Places.objects.insertPlacesインスタンスでなければならない辞書のリストを取りません。通常の操作は、の個々のインスタンスを作成しPlaces、保存または挿入することです。次に例を示します。

Places(name="test", loc=[-87, 101]).save()
Places(name="test 2", loc=[-87, 101]).save()

ただし、一括挿入を行いたい場合は、インスタンスのリストを渡してクエリセットPlacesを呼び出すことができます。insertobjects

Places.objects.insert([Places(name="test", loc=[-87, 101]), 
                       Places(name="test 2", loc=[-87, 101])])
于 2013-03-01T09:54:29.723 に答える
10

一度に複数のドキュメントのDocumentオブジェクトを初期化しようとしています。mongoengine のBaseDocumentクラスを見ると、その__init__メソッドが 1 つのドキュメントのフィールドに関連するキーワード引数のディクショナリを受け取ることがわかります。

一括保存を行う場合は、場所のインスタンスのリストを作成し、それをinsert()メソッドに渡す必要があります。

a = []
a.append(places(**{"name": 'test', "loc": [-87,101]}))
a.append(places(**{"name": 'test', "loc": [-88,101]}))
x = places.objects.insert(a)
于 2013-03-01T06:55:45.733 に答える