2013-03-02 29 views
0

我有一個節點應用程序使用rjrodger/simpledb節點驅動程序(https://github.com/rjrodger/simpledb)將數據保存到Amazon SimpleDb以存儲名稱/值對數據。我putItem如下呼籲:如何使用putItem替換Node.js Simpledb中的屬性值

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

無論我怎麼嘗試,節點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的參數,只更新,而不是插入一個新的價值值。

請幫忙。

回答

1

這裏還有其他事情正在發生 - 這種行爲不是預期的。

我添加了一個測試用例這一點 - 提交結賬了這一點: https://github.com/rjrodger/simpledb/commit/236aad0feefad9844548c4fde76e996ee3c4d347

,並在文件夾試運行: 快報simpledb.test.js -o putItemHappy (您可能需要安裝NPM快報)

而且,試圖啓用了debuglogger運行: SDB =新simpledb.SimpleDB({...}),simpledb.debuglogger)

這將打印日誌到控制檯。

在lib/simpledb.js中的putattrs函數:203是否設置put屬性 - 如果您不提供數組,則設置替換模式 - 您的Array.isArray沒有被覆蓋,對不對?

...啊

我想我明白髮生了什麼事情。

你試過:

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

這應該更換。

如果使用數組(['2',true]),它不會替換 - 它假定您要設置多個值。

+0

謝謝理查德。終於工作了。 – 2013-03-07 15:50:41

2

您的代碼始終將Replace參數設置爲false,以便將這些值添加到現有值中。如果將其設置爲true,則現有的屬性值始終會被新值替換。即

或者,您可以爲每個個人 屬性提供Replace參數。將此值設置爲true將導致新屬性值 替換現有屬性值(如果存在)。否則, Amazon SimpleDB只是插入屬性值。例如,如果 某個項目具有屬性{'a','1'},{'b','2'}和{'b','3'} 並且請求者使用屬性調用BatchPutAttributes { 'b', '4'},將Replace參數設置爲true, 的最終屬性將更改爲{'a','1'}和{'b','4'}。這發生在 ,因爲新的'b'屬性取代了舊值。

- Source

statusUpdate:['2', true] 

這裏真不是替換參數。查看結果。代碼將以該屬性的值爲準。