簡體   English   中英

貓鼬:向數組添加元素

[英]Mongoose: Adding an element to array

我正在使用Drywall創建一個網站。

我正在嘗試將儀表板元素添加到管理網站的“帳戶”部分。 儀表板元素用於存儲用戶有權訪問的一系列儀表板(字符串)。

我已經成功地將“儀表板”添加到架構中並在其中存儲了數據。

問題出在這里:我需要能夠向數組添加元素。 當前的代碼顯示方式將替換數據庫中dashboards的內容。

我知道我可以使用$addToSet ,但是由於將fieldsToSet變量作為單個對象發送到findByIdAndUpdate()方法,因此我不確定該怎么做。

這是我的代碼段:

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');
 }); 
});

這是原始文件的鏈接:(第184-203行)

謝謝!

fieldsToSet是一個不好的名字(在這種情況下至少會引起誤解),該參數實際上是update ,它可以執行$ action之類的$ addToSet

我認為您不想(僅)使用儀表板設置搜索字段。 我猜該字段用於索引用戶進行搜索。 因此,您可能最終會執行以下操作:

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM