• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

125
Views
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

about 3 years ago · Santiago Trujillo
1 answers
Answer question

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.

about 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error