node.js - 无法对 Mongoose 结果执行操作
问题描述
Product
.findAll()
.then((products) => {
/* Perform operations */
}
上面的查询返回一个产品数组。例如,
[
{
name: Mobile,
price: 10000
},
{
name: Laptop,
price: 20000
},
]
我需要对 products 数组进行一些更改(根据现有字段的值添加新字段,并删除那些现有字段)。我尝试了几种方法,但没有一种方法有效:
products.forEach((product) => {
product.[updatedPrice] = updatedPrice;
delete product[price];
}
Array.map() 也不起作用。
以下工作,但我不知道背后的工作,以及为什么会发生。另外,如何使用相同的方法删除字段。
products.forEach((product) => {
product.set('updatedPrice', updatedPrice, {strict: false})
}
解决方案
这里要注意的是,.then((products)
这里的 products 对象不是 JSON 对象,而是 Mongoose Document 对象,您使用的 set 方法由 mongoose 定义。您可以从这里参考它https://mongoosejs.com/docs/guide.html#strict
我们可以做两件事:
使用
lean()
(返回一个普通的 js 对象)产品.findAll()。
lean()
.then((products) => { /* 执行操作*/ });
在 products 对象上使用
toJSON()
方法将 mongoose 对象转换为 js 对象Product.findAll().then((products) => { products = products.
toJSON()
; /* 执行操作*/ });
谢谢
推荐阅读
- c# - GCHandle.Alloc 会阻止分页吗?
- sqlite - SQLite 按外部表字段排序
- javascript - 在 AntD 中,如何将 TreeSelect 的功能与 Select 的“标签”模式结合起来?
- python-socketio - 使用 socketIO 服务器将从单独的 python 程序生成的数据发送到 socketIO 客户端
- elasticsearch - 处理 Elasticsearch 中的可选字段搜索
- r - 生存分析中未找到对象“PSTATUS”
- r - lm 函数/系数,用于一个数据帧 R 中的特定不同时间窗口/事件
- javascript - 处理多个 else if 语句以提高 Google Apps 脚本速度的最佳方法是什么?
- node.js - React 应用程序未在命令行中的“npm start”时启动。npm install 命令在 cmd 中也没有响应
- permissions - 用于覆盖/删除驱动器项目权限的 Microsoft Graph API