2015-07-01 2 views
4

У меня есть одно поле, которое я объявленный в виде строки в модели, как показано ниже:Dynamo DB + In put Item Запрос, как передать значение null?

App.Student= DS.Model.extend({ 
name: DS.attr('string'), 
address1: DS.attr('string'), 
address2: DS.attr('string'), 
city: DS.attr('string'), 
state: DS.attr('string'), 
postal: DS.attr('string'), 
country: DS.attr('string'), 
}); 

Здесь в режиме редактирования, когда я обновить Adderess 2 поля нулевого, то ниже ошибки приходит:

"Failed to edit property: One or more parameter values were invalid: An AttributeValue may not contain an empty string"

Я знаю, что это ошибка генерируется, потому что я обновление адреса 2 поля в нуле и то, что я хочу адрес 2 поля не является обязательным (можно передавать данные или могут также покинул этот столбец как пустой ")

ответ

1

В конце концов, я понял это правильно, путь может быть каким-то другим, но он работает для меня !!!

Вот код для того же.

AttributeUpdates: { 
        Address2: 
        { 
         Action: "DELETE" 
        }, 
        } 

И после этого я добавляю значение при условии.

if (propertyObj.address2) { 
     params.AttributeUpdates.address2 = { 
      Value: { 
       S: propertyObj.address2 
      }, 
      Action: "PUT" 
     } 
    } 

Спасибо всем от всего сердца:) кто пытался мне помочь, Привет!

1

Вы можете использовать тип AttributeValue null в качестве заполнителя. Если вы не можете изменить тип, выберите значение дозорного значения, например «ZZZZZ» или подобное, и сделайте это, представляя пустую строку. В качестве альтернативы, ваша модель может иметь только одно поле адреса, а затем вы можете кодировать обе адресные строки в address1, если вторая адресная строка имеет значение null/empty.

+0

Это уже заявляет в виде строки, и я также не могу сделать это «Атрибуты значение Null» есть ли другой способ сделать то же самое, когда тип данных остается такой же, как «String» и я могу сделать операцию ? – Developer

+1

Я обновил свой ответ, чтобы ответить на ваш вопрос. –

1

Я просто передаю nulls. Вот мой сценарий NodeJS для загрузки данных из файла в DynamoDB, я просто использую тройники, чтобы избежать пустых строк.

var AWS = require("aws-sdk"); 
var fs = require('fs'); 

// Make sure we got a filename on the command line. 
if (process.argv.length < 3) { 
    console.log('Usage: node ' + process.argv[1] + ' FILENAME'); 
    process.exit(1); 
} 

var filename = process.argv[2]; 

AWS.config.update({ 
    region: "us-west-2", 
    //endpoint: "http://localhost:8000" 
}); 

var docClient = new AWS.DynamoDB.DocumentClient(); 

console.log("Importing Addresses into DynamoDB. Please wait."); 

var allObjs = JSON.parse(fs.readFileSync(filename, 'utf8')); 
allObjs.forEach(function(obj) { 
    var params = { 
     TableName: "Address", 
     Item: { 
      "address_detail_pid": obj.address_detail_pid, 
      "flat_type": obj.flat_type == '' ? null : obj.flat_type, 
      "flat_number": obj.flat_number == '' ? null : obj.flat_number, 
      "level_type": obj.level_type == '' ? null : obj.level_type, 
      "level_number": obj.level_number == '' ? null : obj.level_number, 
      "number_first": obj.number_first == '' ? null : obj.number_first, 
      "street_name": obj.street_name == '' ? null : obj.street_name, 
      "street_type_code": obj.street_type_code == '' ? null : obj.street_type_code, 
      "locality_name": obj.locality_name == '' ? null : obj.locality_name, 
      "state_abbreviation": obj.state_abbreviation == '' ? null : obj.state_abbreviation, 
      "postcode": obj.postcode == '' ? null : obj.postcode, 
      "longitude": obj.longitude == '' ? null : obj.longitude, 
      "latitude": obj.latitude == '' ? null : obj.latitude 
     } 
    }; 

    docClient.put(params, function(err, data) { 
     if (err) { 
      console.error("Unable to add obj", obj.address_detail_pid, ". Error JSON:", JSON.stringify(err, null, 2)); 
     } else { 
      console.log("PutItem succeeded:", obj.address_detail_pid); 
     } 
    }); 
}); 
+1

Ваш ответ должен быть де-факто решением для обработки пустых строк/значений. Мое понимание, однако, в том, что это допустимо для 'DocumentClient.put', а не' PutItem'. Для других см. Http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html – user1322092

+0

Одно предупреждение, я не смог запросить GSI, который включает в себя поле, установленное в null как значение диапазона. – user1322092

Смежные вопросы