• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

168
Vistas
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 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

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 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda