【问题标题】:Mongoose: Adding an element to arrayMongoose:向数组添加元素
【发布时间】:2014-08-03 05:54:15
【问题描述】:

我正在使用Drywall 创建一个网站。

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

我已经成功地将“仪表板”添加到架构中并在其中存储数据。

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

我知道我可以使用$addToSet,但我不确定我该怎么做,因为fieldsToSet 变量作为单个对象发送到findByIdAndUpdate() 方法。

这是我的代码的 sn-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 行)

谢谢!

【问题讨论】:

    标签: javascript arrays node.js mongoose nodes


    【解决方案1】:

    fieldsToSet 是一个坏名字(至少在这种情况下会产生误导),参数实际上是 update,它可以像 $addToSet 一样采取 $actions

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

    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
    }
    

    【讨论】:

    • 谢谢!这实际上是一个非常愚蠢的问题。添加仪表板时,我忘记了服务器端脚本中的逗号......
    猜你喜欢
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2011-08-11
    • 2015-09-02
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多