在调用了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
即可。