mongoose操作資料庫時新增新屬性失敗的問題
阿新 • • 發佈:2019-02-08
在呼叫了mongoose
外掛操作MongoDB
資料庫時,已成功獲取到查詢出來的資料物件doc,但是在為doc新增新的屬性doc.productNum
和doc.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.productNum
與doc.checked
屬性,但其實並沒有對doc
進行更改。
解決方案
只要將文件物件轉換為Object
物件即可,使用mongoose
Document.prototype.toObject()
方法,或者使用JSON.stringify()
方法,將doc
轉換為Object
物件。
if (doc) {
var obj = doc.toObject();
obj.productNum = 1;
obj.checked = 1;
然後向資料庫插入obj
即可。