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即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值