mongoose(mongodb)和Sequelize(mysql)查询数据库后添加新属性,前端拿不到新属性问题

最近在着手做一个koa2商城的时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题,

然后测试了一下Sequelize(mysql),发现也有同样的问题存在。此时着手干!

 

mongoose问题展示:

 1 router.get('/order_show', async (ctx, next) => {
 2     const id = ctx.query.id
 3     try {
 4         let doc = await Order.findOne({ _id: id }).populate(['buyid', 'address'])    
 5         doc.goods.forEach(async (item, index) => {
 6             const goodsdata = await Goods.findOne({ id: item.id })
 7             doc.goods[index].list = goodsdata
 8         })
 9         if (!doc) {
10             await ctx.render('order/order_show', { orderInfo: null })
11             return false
12         }
13         await ctx.render('order/order_show', { orderInfo: doc })
14     } catch (err) {
15         console.log(err)
16         await ctx.render('order/order_show', { orderInfo: null })
17     }
18 
19 })

问题:以上案例,发现访问以上域名的时候,前台模板并没有list这个属性。

经过查询mongoose 文档,发现通过mongoose查询的结果为Document文档类型而并非对象类型,因此设置list属性并未生效,并没有对doc进行更改。

 

mongoose(mongodb)解决方法:

我们只需要将doc对象转换为Object对象即可,使用mongoose自带的Document.prototype.toObject()方法,或者使用JSON.stringify()方法,将doc转换为Object对象。修改代码如下:

 1 router.get('/order_show', async (ctx, next) => {
 2     const id = ctx.query.id
 3     try {
 4         let doc = await Order.findOne({ _id: id }).populate(['buyid', 'address'])    
 5         doc = doc.toObject() // 修改这里就可以,将doc转换为Object对象
 6         doc.goods.forEach(async (item, index) => {
 7             const goodsdata = await Goods.findOne({ id: item.id })
 8           doc.goods[index].list = goodsdata
 9         })
10         if (!doc) {
11             await ctx.render('order/order_show', { orderInfo: null })
12             return false
13         }
14         await ctx.render('order/order_show', { orderInfo: doc })
15     } catch (err) {
16         console.log(err)
17         await ctx.render('order/order_show', { orderInfo: null })
18     }
19 
20 })

 

Sequelize问题展示:

1 for (let i = 0; i < orderList.length; i++) {
2     let userInfo = await wdUser.findById(orderList[i].user_id)
3     orderList[i].user_info = userInfo 
4 }

问题:以上案例,user_info这个属性并没有添加上去

 

Sequelize(mysql)解决方法:

1 for (let i = 0; i < orderList.length; i++) {
2     let userInfo = await wdUser.findById(orderList[i].user_id)
3     orderList[i].setDataValue( 'user_info', userInfo )
4 }

 

以上个人见解

posted on 2019-03-21 16:54 肖秋雄 阅读() 评论() 编辑 收藏

版权声明:本文为it-xiong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/it-xiong/p/10572772.html