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])])