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

161
Visualizações
La sintaxis de AWS DocumentDB difiere de MongoDB para UpdateMany

Estoy intentando realizar una actualización usando un substr después de migrar desde mongo> documentDB, sin embargo, recibo un error extraño.

Lo siguiente funciona en Mongo 4.0 usando pymongo:

 await db[cls.colname].update_many( {'$or': [{'preview_title': {'$exists': False}}, {'preview_title': None}]}, [{'$set': {'preview_title': {'$substr': ['$title', 0, 70]}}}], )

El comando equivalente de mongo shell también funciona:

 db.getCollection('pages').updateMany({'$or': [{'preview_title': {'$exists': false}}, {'preview_title': null}]}, [{'$set': {'preview_title': {'$substrBytes': ['$title', 0, 70]}}}])

Sin embargo, después de cambiar a AWS DocumentDB, no acepta la actualización como una matriz o devolverá este error: "MongoError: tipo incorrecto para la imagen del parámetro u"

Si cambio el comando al siguiente, funcionará (básicamente, simplemente elimine los corchetes de la parte de actualización):

 db.getCollection('pages').updateMany({'$or': [{'preview_title': {'$exists': false}}, {'preview_title': null}]}, {'$set': {'preview_title': {'$substr': ['$title', 0, 70]}}})

Esto estaría bien, sin embargo, la llamada pymongo equivalente no parece funcionar:

 await db[cls.colname].update_many( {'$or': [{'preview_title': {'$exists': False}}, {'preview_title': None}]}, {'$set': {'preview_title': {'$substr': ['$title', 0, 70]}}}, )

Devuelve el siguiente error: pymongo.errors.WriteError: el documento no puede tener nombres de campo con prefijo $: $substr

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Pasar una matriz como actualización se denomina "actualizar con una canalización de agregación". Aparentemente, DocumentDB no implementa eso (entre un montón de otras características de MongoDB).

Cuando elimina la matriz de la actualización, cambia de usar https://docs.mongodb.com/manual/reference/operator/aggregation/set/ a usar https://docs.mongodb.com/manual/reference/operator/update /conjunto/ . Notará que el $set de actualización no acepta expresiones como lo hace el $set de agregación. Entonces, su actualización de shell con $set escribe un documento (anidado) {'$substr': ['$title', 0, 70]} en el campo de preview . Por lo general, las claves que comienzan con dólares no se pueden consultar porque los operadores de MongoDB utilizan el prefijo dólar, por lo que escribir un documento de este tipo en un campo es una mala idea. Pymongo te dice esto y rechaza la operación. El shell lo permite porque también lo usan internamente los ingenieros del servidor MongoDB para realizar pruebas y, por lo tanto, permite que se hagan varias cosas extrañas/inusuales.

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