在调用了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;
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接