mongoose操作數據庫時添加新屬性失敗的問題

在調用了mongoose插件操作MongoDB數據庫時,已成功獲取到查詢出來的數據對象doc,但是在爲doc添加新的屬性doc.productNumdoc.checked發現doc並沒有發生更改,但是卻能獲取到對應的新屬性。

測試代碼如下:

if (doc) {
  console.log("doc before: " + doc)
  doc.productNum = 1;
  doc.checked = 1;
  console.log("doc after: " + doc);
  console.log("doc.productNum isEnumerable: " + doc.propertyIsEnumerable("productNum"));
  console.log("doc.productNum: " + doc.productNum);
  console.log("doc.checked: " + doc.checked);

運行結果如下:

doc before: { _id: 58e7053c98dab115d336b3f8,
  productId: '201710013',
  productName: 'Ear2000',
  salePrice: 2000,
  productImage: '13.jpg',
  productUrl: '' }
doc after: { _id: 58e7053c98dab115d336b3f8,
  productId: '201710013',
  productName: 'Ear2000',
  salePrice: 2000,
  productImage: '13.jpg',
  productUrl: '' }
doc.productNum isEnumerable: true
doc.productNum: 1
doc.checked: 1

會發生這種情況,是因爲通過mongoose查詢的結果爲Document文檔類型而並非對象類型,因此,雖然在後臺可以獲取到新增的doc.productNumdoc.checked屬性,但其實並沒有對doc進行更改。

解決方案

只要將文檔對象轉換爲Object對象即可,使用mongoose自帶的Document.prototype.toObject()方法,或者使用JSON.stringify()方法,將doc轉換爲Object對象。

if (doc) {
  var obj = doc.toObject();
  obj.productNum = 1;
  obj.checked = 1;

然後向數據庫插入obj即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章