Mongoose:向数组添加元素

时间:2014-06-12 19:20:22

标签: javascript arrays node.js mongoose nodes

我使用Drywall创建网站。

我正在尝试将信息中心元素添加到管理网站的“帐户”部分。仪表板元素用于存储用户有权访问的仪表板(字符串)数组。

我成功地添加了"仪表板"进入架构并在其中存储数据。

问题在于: 我需要能够向数组添加元素。代码当前的方式替换了数据库中dashboards的内容。

我知道我可以使用$addToSet,但我不确定我是如何做到的,因为fieldsToSet变量作为单个对象发送到findByIdAndUpdate()方法。 / p>

这是我的代码片段:

workflow.on('patchAccount', function() {
var fieldsToSet = {
  name: {
    first: req.body.first,
    middle: req.body.middle,
    last: req.body.last,
    full: req.body.first +' '+ req.body.last
  },
  company: req.body.company,
  phone: req.body.phone,
  zip: req.body.zip,
  search: [
    req.body.dashboards,
    req.body.first,
    req.body.middle,
    req.body.last,
    req.body.company,
    req.body.phone,
    req.body.zip,
  ]
};

req.app.db.models.Account.findByIdAndUpdate(req.params.id, fieldsToSet, function(err, account) {
  if (err) {
    return workflow.emit('exception', err);
  }

  workflow.outcome.account = account;
  return workflow.emit('response');
 }); 
});

这是指原始file的链接:(第184-203行)

谢谢!

1 个答案:

答案 0 :(得分:0)

fieldsToSet是一个坏名称(在这种情况下至少会产生误导),参数实际上是update,它可以采取$ actionToSet等$动作

我不认为您想要(仅)设置带有仪表板的搜索字段。我猜这个字段用于索引用户进行搜索。所以你可能会做这样的事情:

fieldsToSet = {
   ....all the regular stuff,
   $addToSet: {dashboard: req.body.dashboardToAdd}  
                          //I'm not sure that you can add multiple values at once
}

由于这是每次设置所有值时我都不确定您是否真的想要添加单个仪表板项目。相反,您可能希望获得用户拥有的完整仪表板集,并且无论如何都要重新设置整个阵列(如果他们删除了一个?)

fieldsToSet = {
   ....all the regular stuff,
   dashboards: req.body.dashboards
                          //In this case you'd want to make sure dashboards is an appropriate array
}