2016-02-29 3 views
1

Я новичок в DynamoDB и хочу только создать новый объект, если основной ключ сортировки (имя) не существует дважды. Я пробовал так:Первичный ключ сортировки Выражение атрибута DynamoDB

params.id = randomId(); 

     var item = { 
      TableName: tableName, 
      Item: params, 
      ConditionExpression: "#na <> :n", 
      ExpressionAttributeNames:{"#na":"name"}, 
      ExpressionAttributeValues:{ 
       ":n":params.name 
      } 
     }; 

     docClient.put(item, function(err, data) { 
      console.log("Data:", data); 
      console.log("Err:", err); 
     }); 

Но деталь по-прежнему создано:/Is IST даже можно создать выражение условие на первичный ключ сортировки?

ответ

0

На самом деле я просто столкнулся с этой проблемой, as explained here похоже, что вы не можете, вам нужно использовать Global Secondary Index для ключа «сортировать».

Вам нужно будет выполнить отдельный запрос на GSI, чтобы узнать, существует ли, например, «имя», например.

function checkNameDoesNotExist(name, fn){ 

    query.IndexName = 'nameInUsers'; 
    query.KeyConditionExpression = 'name = :n'; 
    query.ExpressionAttributeValues = { 
     ':n': name 
    }; 

    dynamodb.query(query, function(err, data){ 
     if (err) { 
      return fn(err); 
     } else { 
      fn(null, data); 
     } 
    }); 
} 

Отказ от ответственности: написал код с верхней части моей головы, не знаю, если он работает, но должно дать вам хорошую отправную точку

0

Вы можете использовать условие существует. Он вернет ошибку, заявив, что объект уже существует

var item = { 
    TableName: tableName, 
    Item: params, 
    Expected: { 
    name: { 
     Exists: false 
    } 
}; 

docClient.put(item, function(err, data) { 
    console.log("Data:", data); 
    console.log("Err:", err); 
}); 
Смежные вопросы