2017-11-18 103 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