首页 > 解决方案 > 无法对 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})
}

标签: node.jsmongodbmongoose

解决方案


这里要注意的是,.then((products)这里的 products 对象不是 JSON 对象,而是 Mongoose Document 对象,您使用的 set 方法由 mongoose 定义。您可以从这里参考它https://mongoosejs.com/docs/guide.html#strict

我们可以做两件事:

  1. 使用lean()(返回一个普通的 js 对象)

    产品.findAll()。lean().then((products) => { /* 执行操作*/ });


  1. 在 products 对象上使用toJSON()方法将 mongoose 对象转换为 js 对象

    Product.findAll().then((products) => { products = products. toJSON(); /* 执行操作*/ });

谢谢


推荐阅读