nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效
最近在着手koa时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题,
然后测试了一下Sequelize(mysql),发现也有同样的问题存在。此时着手干!
1.1 mongoose问题展示:
router.get('/order_show', async (ctx, next) => {
const id = ctx.query.id
try {
let doc = await Order.findOne({ _id: id }).populate(['buyid', 'address'])
doc.goods.forEach(async (item, index) => {
const goodsdata = await Goods.findOne({ id: item.id })
doc.goods[index].list = goodsdata
})
if (!doc) {
await ctx.render('order/order_show', { orderInfo: null })
return false
}
await ctx.render('order/order_show', { orderInfo: doc })
} catch (err) {
console.log(err)
await ctx.render('order/order_show', { orderInfo: null })
}
})
问题:以上案例,获取订单详情信息,要查询出订单详情里面每条商品的数据,先查询出来该订单的数据,然后循环订单数据里面商品数组,再根据数组去根据每一个id去获取对应的商品数据。
获取到商品数据后,这时候就想追加到原来获取到的商品数组里面的每一项的list属性里面,但时候这时候发现,直接设置并没有效果哦!
很诡异吧,但是经过查询了mongoose文档之后,才发现原来mongoose查询出来的数据发现访问以上域名的时候,前台模板并没有list这个属性。
经过查询mongoose 文档,知道mongoose查询出来的对象是document对象,并不是普通的javascript对象,所以设置list属性并未生效。
1.2 mongoose(mongodb)解决方法:
将document对象转换为普通的javascript对象,我们可以使用mongoose的Document.prototype.toObject()方法进项转换。修改代码如下:
经过先把document对象转换为普通javascript对象之后,我们就可以使用js object的方法去设置新属了。
router.get('/order_show', async (ctx, next) => {
const id = ctx.query.id
try {
let doc = await Order.findOne({ _id: id }).populate(['buyid', 'address'])
doc = doc.toObject() // 修改这里就可以,将doc转换为Object对象
doc.goods.forEach(async (item, index) => {
const goodsdata = await Goods.findOne({ id: item.id })
doc.goods[index].list = goodsdata
})
if (!doc) {
await ctx.render('order/order_show', { orderInfo: null })
return false
}
await ctx.render('order/order_show', { orderInfo: doc })
} catch (err) {
console.log(err)
await ctx.render('order/order_show', { orderInfo: null })
}
})
测试了mongoose 操作mongodb的问题之后,接着我就试了mysql的工具 Sequelize的,设置新属性,并没有效果。
2.1 Sequelize问题展示:
for (let i = 0; i < goods.length; i++) {
let brandInfo = await Brand.findById(goods[i].brand_id)
goods[i].brandInfo = brandInfo
}
问题:以上案例,user_info这个属性并没有添加上去。
去查询了Sequelize的文档,查询到这个方法可以去操作查询出来的数据结构变化:
setDataValue(key, value)
2.2 Sequelize(mysql)解决方法:
for (let i = 0; i < goods.length; i++) {
let brandInfo = await Brand.findById(goods[i].brand_id)
goods[i].setDataValue( 'brandInfo', brandInfo )
}
nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效的更多相关文章
- Mysql删除数据后磁盘空间未释放的解决办法【转】
转自 Mysql删除数据后,磁盘空间未释放的解决办法 - 今日头条(TouTiao.com)http://toutiao.com/a6303087712678412546/?tt_from=mobil ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- mysql 查询数据时按照A-Z顺序排序返回结果集
mysql 查询数据时按照A-Z顺序排序返回结果集 $sql = "SELECT * , ELT( INTERVAL( CONV( HEX( left( name, 1 ) ) , 16, ...
- MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
- 十二、MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
- navicat for Mysql查询数据不能直接修改
navicat for Mysql查询数据不能直接修改 原来的sql语句: <pre> select id,name,title from table where id = 5;</ ...
- 使用Python3导出MySQL查询数据
整理个Python3导出MySQL查询数据d的脚本. Python依赖包: pymysql xlwt Python脚本: #!/usr/bin/env python # -*- coding: utf ...
- 关于mysql 删除数据后物理空间未释放(转载)
转自 关于mysql 删除数据后物理空间未释放(转载) - NETDATA - 博客园http://www.cnblogs.com/shawnloong/archive/2013/02/07/2908 ...
- MySQL删除数据后磁盘空间的释放情况【转】
OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除 ...
随机推荐
- LeetCode Weekly Contest 118
要死要死,第一题竟然错误8次,心态崩了呀,自己没有考虑清楚,STL用的也不是很熟,一直犯错. 第二题也是在室友的帮助下完成的,心态崩了. 970. Powerful Integers Given tw ...
- 1.5:Unity Render Pipeline
文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 这一节主要是为上一节中没有提到的一些概念作补充. 上一节提到了Unity中 ...
- BIOS备忘录之SPI(fingerprint)设备
Reset和INT信号使用的是GPIO功能,需要显式的使用(INT信号使用了GPIO的int number,RST信号使用了GPIO的absolute number): 问题举例 漏电导致功能异常:在 ...
- 程序员 面试题【前端,java,php】
跬步客 网址:https://www.kuibuke.com/wall/index
- 湖南省队集训 Day 2
从这里开始 Problem A 走路 Problem B 游戏 Problem C 有趣的字符串题 暴力分又没骗满sad..... Problem A 走路 $O(n^2)$动态规划是显然的. 更新方 ...
- Excel导出采用mvc的ExcelResult继承遇到的问题Npoi导出
#region 构建Excel文档 //创建Excel文件的对象 NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSS ...
- 不错的anroid源码在线浏览网站【学习笔记】
不错的anroid源码在线浏览网站:http://androidxref.com/
- 论文笔记:Progressive Neural Architecture Search
Progressive Neural Architecture Search 2019-03-18 20:28:13 Paper:http://openaccess.thecvf.com/conten ...
- 从事三年java开发后, 我打算转人工智能
作为一个2015年参加java培训,2016年计算机科学与技术本科毕业后一直从事java开发的程序员来说, 做出这一步真的不容易, 可是我没赶上java最火的时候,反而渐渐感受到了java的没落, 目 ...
- Java分布式锁看这篇就够了
### 什么是锁? 在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量. 而同步的本质是通过锁来实现的 ...