如何使用putItem替换Node.js Simpledb中的属性值



我有一个节点应用程序将数据保存到Amazon SimpleDb,以使用rjrodger/SimpleDb节点驱动程序(https://github.com/rjrodger/simpledb)存储名称/值对数据。我像下面这样调用putItem:

sdb.putItem('mySimpleDbTable','Record_0001', 
{
   statusUpdate:'1'
},
function(err,res,meta){
  if (err) {
     console.log('Status Update error: ' + err.Message);
   }
  console.log("Memories, you're talking about memories: "+JSON.stringify(res)) 
})

插入如下记录:

{ $ItemName: 'Record_0001' { statusUpdate: '1' }}

然后经过一些操作,我想更新statusUpdateto '2',像这样:

{ $ItemName: 'Record_0001' { statusUpdate: '2' }}

无论我如何尝试,Node simpleDb驱动程序总是插入一个新属性,如下所示:

{ $ItemName: 'Record_0001' { statusUpdate: '1',  statusUpdate: '2' }}

如果我尝试

sdb.putItem('mySimpleDbTable','Record_0001', 
{
statusUpdate:['2', true]
}

则得到-

{ $ItemName: 'Record_0001' { statusUpdate: '1',  statusUpdate: '2', statusUpdate: 'true' }}

如何使用putItem的"replace:true"参数来更新值而不是插入新值?

请帮。

您的代码总是将Replace参数设置为false,因此这些值将被添加到现有值。如果将其设置为true,则attribute的现有值总是被新值替换。例如

可选地,您可以为每个个体提供Replace参数属性。将此值设置为true会产生新的属性值替换现有的属性值(如果存在)。否则,Amazon SimpleDB只是插入属性值。例如,如果一个项目的属性{' a ', ' 1 '}, {' b ', ' 2 '},, {' b ', ' 3 '}请求者使用属性{'b'调用BatchPutAttributes,'4'}如果Replace参数设置为true,则项被更改为{'a', '1'}和{'b', '4'}。这发生因为新的'b'属性取代了旧的值。

—Source

statusUpdate:['2', true]

这里true不是替换参数。看看结果。代码将true作为该属性的值。

这里发生了一些其他的事情——这种行为是不被期望的。

我已经为这个添加了一个测试用例-签出这个提交:https://github.com/rjrodger/simpledb/commit/236aad0feefad9844548c4fde76e996ee3c4d347

并在文件夹test中运行:expresso simpledb.test.js -o putItemHappy(你可能需要NPM安装expresso)

同时,尝试在启用调试器的情况下运行:sdb = new simpledb.SimpleDB({…}),simpledb.debuglogger)

这将打印日志到控制台。

lib/simpledb.js:203中的putattrs函数设置put属性-如果您不提供数组-您的array,则设置替换模式。isArray没有被覆盖,对吧?

…啊

我想我明白是怎么回事了。

你试过了吗?

sdb.putItem('mySimpleDbTable','Record_0001', 
{
  statusUpdate:'2'
}

这个应该代替。

如果你使用数组(['2',true]),它不会替换-它假设你想设置多个值

相关内容

  • 没有找到相关文章

最新更新