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

737
Views
por qué mi expresión de condición para el atributo no existe falla en dynamodb

Mi tabla de DynamoDB tiene una clave principal como id . El mismo id se utilizará para consultar un registro.

Ahora quiero insertar un registro con id y URL originalURL como atributos, quiero insertar este registro si y solo si la id y la URL originalURL no existen en la tabla.

Actualización: - ConditionExpression: "attribute_not_exists(id) AND attribute_not_exists(originalURL)" solo funcionará en el contexto de la clave principal, de acuerdo con los documentos (puede realizar una operación de colocación condicional (agregue un nuevo elemento si uno con la clave principal especificada no 't exist) , por lo que attribute_not_exists(originalURL) está allí o no, no hace la diferencia. Entonces necesito una solución donde ambas condiciones funcionen o la URL original también actúe como una clave

 router.post('/', async function (req, res, next) { urlId = await nanoid(8); //const hashids = new Hashids('this is my salt') //urlId=hashids.encode(1) console.log('jatin', urlId); // urlId=uuidv4(); const { longURL } = req.body const params = { TableName: 'url', Item: { "id": urlId, "originalURL": longURL }, UpdateExpression: "set originalURL = :y", ConditionExpression: "attribute_not_exists(id) AND attribute_not_exists(originalURL)" } dynamoDb.put(params, (error, data) => { if (error) { console.log(error); res.status(400).json({ error: error }); } else if (Object.keys(data).length === 0 && data.constructor === Object) { res.status(200).json( { urlId, longURL, status: 'success' }) } else { res.status(400).json({ error: 'Please try again' }); } }) });

a partir de ahora, incluso si intento enviar una solicitud con la misma URL original que ya está presente, agrega con éxito el registro que no quiero.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Para putItem api puede tener expresiones condicionales. Según el doc.

CondiciónExpresión

Una condición que debe cumplirse para que una operación PutItem condicional tenga éxito.

Una expresión puede contener cualquiera de los siguientes:

Funciones: atributo_existe | atributo_no_existe | tipo_atributo | contiene | comienza_con | Talla

Estos nombres de funciones distinguen entre mayúsculas y minúsculas.

Operadores de comparación: = | <> | < | > | <= | >= | ENTRE | EN

Operadores lógicos: Y | O | NO

Para obtener más información sobre las expresiones de condición, consulte Expresiones de condición en la Guía para desarrolladores de Amazon DynamoDB.

Tipo: Cuerda

Requerido: No

también se ha explicado el mismo escenario en este documento: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html#Expressions.ConditionExpressions.PreventingOverwrites

La operación PutItem sobrescribe un elemento con la misma clave (si existe). Si desea evitar esto, utilice una expresión de condición. Esto permite que la escritura continúe solo si el elemento en cuestión aún no tiene la misma clave.

 aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json \ --condition-expression "attribute_not_exists(Id)"
over 4 years ago · Santiago Trujillo Report

0

Comprueba si esto resuelve el problema.

 import { marshall } from "@aws-sdk/util-dynamodb"; const params = { TableName: 'url', Item: { "id": urlId, "originalURL": longURL }, ExpressionAttributeValue: marshal({ ":originalURL": originalURLVariable ":id": idVariable }), ConditionExpression: "id <> :id AND originalURL <> :originalURL", UpdateExpression: "set originalURL = :originalURL", }
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!