objects python mongodb flask mongoengine

python - objects - querying database mongoengine



insertar varios documentos usando mongoengine en mongodb (2)

En la aplicación de mi matraz, estoy usando MongoeEgine. Estoy intentando insertar varios documentos en mi colección de lugares en mi MongoDB.

Mi clase de documento se define como

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)

La última declaración falla

x= places(a) TypeError: __init__() takes exactly 1 argument (2 given)

También traté de guardar esto en mi instancia

places.insert(x) places.save(x)

ambos fallan Por favor ayuda.


Intenta inicializar el objeto de documento para varios documentos a la vez. Si observas la clase BaseDocument de mongoengine , verás que su método __init__ toma un diccionario de argumentos de palabra clave, que se relaciona con los campos de un único documento.

Si desea hacer un guardado masivo, debe hacer una lista de instancias de lugares y pasarlo al método insert () .

a = [] a.append(places(**{"name": ''test'', "loc": [-87,101]})) a.append(places(**{"name": ''test'', "loc": [-88,101]})) x = places.objects.insert(a)


Places.objects.insert no toma una lista de diccionarios. Tiene que ser instancias de Places . Las operaciones normales serían crear instancias individuales de Places y guardar o insertar, por ejemplo:

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

Sin embargo, si desea hacer una inserción masiva, puede pasar una lista de instancias de Places y llamar a insert en el conjunto de consulta de objects por ejemplo:

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