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

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

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 Relatório

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