2015-05-28 118 views
0

返回我使用的NodeJS表达猫鼬创建应用程序时增加新的属性对象的数组。而mongodb.user是猫鼬的架构模型,我试图获取对象的用户数组,该查询是完美的,我的问题是我要添加新的属性为每个用户。我尝试如下。但它不会增加收藏。节点JS从猫鼬收集

exports.memberlist = function(req, res) { 
     user.find({}).exec(function(err, collection) { 
      collection.forEach(function(member){ 
      member.city = 'Colombo'; 
      collection.push(member); 
      }); 
     res.send(collection); 
     }); 
}; 
+0

您正在推进您正在迭代的集合。它是否取代现有的项目? – gypsyCoder

+0

用户集合中没有称为城市的项目。我想添加具有价值的新项目。 –

回答

0

默认情况下,猫鼬不允许添加从MongoDB DB提取的对象的属性。为此,您有两种选择:

1/ before exec statement you add a lean() method : 
user.find({}).lean().exec(function(err, collection) {do whatever you want with collection} 

2/ collection = collection.toObject(); 
+0

这很酷。它正在工作......感谢你的帮助Adil .. –

1

就可以像在架构层面这

创建控制器级别创建虚拟财产

userSchema.virtual('city').get(function() { 
    return 'Colombo'; 
}); 

exports.memberlist = function(req, res,next) 
{ 
    user.find({}).exec(function(err, users) 
    { 
if(!err) 
{ 
res.json(200, users.toObject({virtual: true})); 
} 
else 
{ 
next(err); 
} 

    }); 
}; 
+0

谢谢你的回答。但实际上我想通过查询循环内的另一个集合来设置城市元素。 –

+0

你可以使用Model.update(条件,更新,选项,回调);你可以在选项设置多:真它将更新所有的文件做任何变薄之前添加到外地模式 – HDK

+0

exports.memberlist =功能(REQ,RES) { user.find({})EXEC(函数(ERR。 ,集合) { collection.forEach(功能(部件) { \t subscriptions.find({member._id}, '城市',功能(ERR,订阅){ \t \t member.city = subscription.city; \t collection.push(构件); \t}); }); res.send(集合); }); };这里的订阅是另一种猫鼬模型,我想从特定用户获得城市和 其添加到成员对象。 –