簡體   English   中英

貓鼬對象:javascript地圖功能無法添加新鍵

[英]Mongoose object :javascript map function not working on adding new keys

我正在嘗試從貓鼬查詢返回的JSON數組上添加新密鑰

  find({chatBotId:req.params.chatBotId}).
  populate('userPlan').
 .exec(function(err,result){

   result.map(function(e){           
      e.transactionObject =null
      e.taxAmount = 100;    
      return e;    
    });
})

我要添加一個新的鍵taxAmount但它不會出現在數組中,但是, transactionObject=null可以正常工作,它是一個現有的鍵

對我result = JSON.parse(JSON.stringify(result))是執行result = JSON.parse(JSON.stringify(result))或執行以下操作:

result = result.map(function (e) {
  e = e.toJSON(); // toJSON() here.
  e.transactionObject = null;
  e.taxAmount = 100;
  return e;
});

甚至更好地使用lean()https://mongoosejs.com/docs/api.html#query_Query-lean ):

Model.find().lean()

引用Array.prototype.map()上的MDN頁面 (重點是我的):

map()方法創建一個數組

您的密碼

result.map(function(e){           
  e.transactionObject =null
  e.taxAmount = 100;    
  return e;    
});

實際上什么也沒做。

如果要使用上面.map的輸出,則必須重新分配它:

arrayWithNewKeys = result.map(function (e) {
  e.transactionObject = null
  e.taxAmount = 100;
  return e;
});

如果以后使用result ,並期望它具有新的鍵transactionObjecttaxAmount ,則可以重新分配result而無需更改以后的代碼:

result = result.map(function (e) {
  e.transactionObject = null
  e.taxAmount = 100;
  return e;
});

您應該使用lean()來防止貓鼬使文檔水化 同樣map()函數獲取並返回一個數組。 因此,我認為最好使用forEach()獲得結果。

results = Document.find({chatBotId:req.params.chatBotId})
 .populate('userPlan')
 .lean()
 .exec(function(err,results){
   results.forEach(function(e){           
      e.transactionObject = null
      e.taxAmount = 100
    });
})

暫無
暫無

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

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