节点 – 无法将键/值附加到对象
使用节点。 这很奇怪,我不能附加键/值…. broadcastStamp = date
的对象结果。 我用typeofvalidation它是一个对象。 没有错误…关键/价值只是根本不存在。
function broadcastSingleClient(result, event, httpObject) { var date = new Date().valueOf(); result.broadcastStamp = date; console.log(result);
更新 :这个对象来自一个mongoose/ mongodb查询callback函数:
Object.keys(models).forEach(function (model) { models[model].find({}).sort({_id: -1}).limit(1).exec( function (err, result){ broadcastSingleClient(result[0], model+"Result", res); });
当在没有exec()callback的shell中执行这个查询时,我能够附加到对象。
您是否打算在修改后保存result
?
您是否在您的broadcastSingleClient
函数中使用Mongoose虚拟属性?
如果不是,那么我认为你可以使用lean
,将返回普通的js对象 – 没有Mongoose对象包装它。
尝试这个:
Object.keys(models).forEach(function (model) { models[model].find({}).sort({_id: -1}).limit(1).lean().exec( // note the "lean" function (err, result){ broadcastSingleClient(result[0], model+"Result", res); });
我创build了jsfiddle,它的工作原理 – http://jsfiddle.net/volkhin/YGgzL/ ,我只添加了结果对象var result = {a: 1, b: 2};
。 我想到的唯一的事情是结果不是简单的对象。 它绝对不会为null,undefined,数字等工作。
编辑 :那么我相信这是由于getter / setter。 最好避免修改这样的对象,因为修改它可能会导致mongoose内部不知道的后果。 如果您只需访问此对象中的某些数据,则可以尝试创build浅拷贝(例如,使用underscorejs _.clone或手动迭代其键),这将返回简单对象。 当然,你可以修改。 但是我不确定它是否会包含所有的数据 – 同样,它可能在很大程度上取决于getters / setters。