私のflaskアプリでは、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)
両方とも失敗します。助けてください。
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])])
一度に複数のドキュメントのDocumentオブジェクトを初期化しようとします。 mongoengineのBaseDocumentクラスを見ると、その__init__
メソッドは、単一のドキュメントのフィールドに関連するキーワード引数の辞書を取ります。
一括保存を行う場合は、placesインスタンスのリストを作成し、それをinsert()メソッドに渡す必要があります。
a = []
a.append(places(**{"name": 'test', "loc": [-87,101]}))
a.append(places(**{"name": 'test', "loc": [-88,101]}))
x = places.objects.insert(a)