2017-11-18 66 views
0

通常我會做到這一點:無法在JSON對象添加和刪除字段

var res = {}; 
res = { _id: '[email protected]', 
      password: 'ABCDEF', 
      phone: '123123123', 
      name: 'Torben Tester', 
      userLog: [ 
       { date: 1510561026, text: 'was CREATED' }, 
       { date: 1510593431, text: 'was UPDATED' } 
      ] 
     } 

res.foo = "bar"; 
delete res.password 
delete res.userLog 

而且我會最終有:

{ _id: '[email protected]', 
    phone: '123123123', 
    name: 'Torben Tester', 
    foo: 'bar' 
} 

但是......如果我從記錄MongoDB的

usersTable.findOne (
    { _id: '[email protected]' } 
,function (err, data) { 
    res = data 
} 

然後水庫仍然是完全一樣

但是沒有任何修改工作

res.foo = "bar"; 
delete res.password 
delete res.userLog 

做什麼都沒有。他們不會返回任何錯誤,並且前後保持不變。

我缺少什麼?當它來自mongodb時,有沒有可能res是不同類型的? (沒有它不是陣列,我已經檢查過了)

當做console.log(res)結構在兩種情況下都完全相同。

任何想法都會非常有幫助,完全停留在這一個小時。

只是爲了更清楚....這是實際的代碼...

usersTable.findOne (
    { _id: userID } 
,function (err, data) { 

    show("============BEFORE================") 
    show({data}) 
    data.agentName = agentName + "XXXX"; 
    delete data.password 
    delete data.userLog 
    show("============AFTER================") 
    show({data}) 

    return resolve(data); 
} 
+1

是'res = data'後面的'delete res.password'? –

+0

正如'函數(err,data){res = data;刪除res.password; }' – mplungjan

+0

是的。我只是簡化了代碼,使其更簡單 – torbenrudgaard

回答

0

我如何解決它......

data = data.toJSON(); 

和多數民衆都...那麼它工作完美。

所以不要被console.log弄錯(數據)導致它會顯示相同的天氣或不是你的結果是一個實際的Json對象。

只是糟透了,它沒有給出像「這不是一個JSON對象」或類似的錯誤。

+0

您似乎誤解了對象和JSON之間的差異。 JSON是用於序列化數組和對象的字符串格式。對象是具有諸如'res.password'之類的屬性的東西。 – Barmar

+0

Barmar你是對的 - 我一直認爲,如果它是鍵入「對象」,那麼我會沒事的。但我猜不。 – torbenrudgaard

+0

只是吮吸,它不會觸發任何錯誤 - 會幫助很多這裏的任何錯誤:) – torbenrudgaard