[英]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.