Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

203
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda