使用Node。这很奇怪,我无法将键/值.... broadcastStamp = date
附加到对象结果。我用typeof验证它是一个对象。没有错误......键/值根本就不存在。
function broadcastSingleClient(result, event, httpObject) {
var date = new Date().valueOf();
result.broadcastStamp = date;
console.log(result);
UPDATE :此对象来自mongoose / mongodb查询回调函数:
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()回调的shell中执行此查询时,我能够附加到该对象。
答案 0 :(得分:1)
我创建了jsfiddle并且它有效 - http://jsfiddle.net/volkhin/YGgzL/,我只将结果对象添加为var result = {a: 1, b: 2};
。我想到的唯一事情是结果不是简单的对象。它肯定不适用于null,undefined,数字等。
修改强>: 然后我相信这是由于吸气者/安装者。并且最好避免修改这样的对象,因为修改它会导致mongoose内部产生未知的后果。如果您只需要访问此对象中的某些数据,您可以尝试创建浅拷贝(例如,使用underscorejs _.clone或手动迭代其键),这将返回简单对象。当然,你可以修改哪个。但是我不确定它是否会包含所有数据 - 再次,它可能在很大程度上取决于getter / setter。
答案 1 :(得分:1)
您是否打算在修改后保存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);
});