Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

204
Views
Inserción masiva con validación en MongoEngine

Estoy insertando objetos a granel en MongoDB usando Mongoengine como este (código simplificado):

 class Customer(Document): first_name = StringField(max_length=100) last_name = StringField(max_length=100) address = StringField(required=True) instances = [Customer(**{'name': 'John', 'last_name': 'Doe'})] Customer.objects.insert(instances)

Estoy insertando masivamente usando la lista de instancias de documentos creadas a partir de dictados. Como puede ver en el ejemplo anterior, la instancia del Cliente carece del campo de address obligatorio. Sin embargo, se guarda en MongoDB de todos modos. Luego, en MongoDB hay un documento de Cliente sin la address de campo requerida.

Mi pregunta: ¿Qué puedo hacer para que el esquema se valide al insertar de forma masiva? ¿Es un bucle for y una instance.save() para cada instancia de Cliente mi única alternativa?


En la documentación de MongoEngine está escrito:

Por diseño, MongoEngine valida estrictamente los documentos justo antes de insertarlos en MongoDB y se asegura de que sean consistentes con los campos definidos en sus modelos.

así que estoy confundido por qué usar objects.insert() no valida el documento. Sin embargo, más adelante en los documentos está escrito:

La validación se ejecuta al llamar a .validate() o .save()

Entonces, tal vez por objects.insert() no valida documentos y antes de la inserción masiva debería haber un ciclo que recorre todas las instancias y llama a validate() ?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Cuando llama a Customer.objects , lo que se devuelve es en realidad un QuerySet . Desafortunadamente, el método QuerySet.insert (documentos aquí ) no tiene opción de validación.

Su idea de validar previamente e insertar masivamente parece ser la mejor opción:

 instances = [] for instance in [{'name': 'John', 'last_name': 'Doe'}]: customer = Customer(**instance) customer.validate() instances.append(customer) Customer.objects.insert(instances)

Esto es mucho más rápido que llamar a save en cada instancia.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!