在 NodeJs 中向对象添加属性和值

Adding properties and values to an object in NodeJs

提问人:P K Dhee Taal 提问时间:8/21/2023 更新时间:8/21/2023 访问量:68

问:

努力向 NodeJs 中从 mongoDB 数据库返回的对象添加额外的属性和值

这是一个 nodeJs 项目。MongoDB 数据库的购物车表中存储的项目很少。 体系结构是,从购物车表中获取商品,然后使用 id 从商品表中获取有关商品的全部详细信息,并查看它们是否仍作为商品存在。

购物车中的商品几乎没有额外的属性,例如计数和过滤器,我想将其添加到商品表中返回的商品中。 我遵循以下方法来实现此功能。 但它没有按预期工作。 有人可以帮我吗?

代码结构如下:

router.get("/", userAuth, async (req, res, next) => {
  try {
    console.log("running");
    const { _id } = req.userInfo;
    const cartItems = await getAllCartItems(_id);
    const carts = [];
    for (const item of cartItems) {
      const cartItem = await getItemById(item.itemId);
      if (cartItem?._id) {
        cartItem.count = item.count;
        cartItem.filter = item.filter;
        carts.push(cartItem);
      }
      // console.log(cartItem);
    }
    carts.length >= 0 &&
      res.json({
        status: "success",
        message: "cart items are returned",
        carts,
      });
  } catch (error) {
    next(error);
  }
});
JavaScript 节点.js MongoDB 对象

评论

1赞 Robin Thomas 8/21/2023
您是否使用任何ORM来连接到mongodb?mongoose
0赞 P K Dhee Taal 8/21/2023
是的,我正在使用猫鼬
0赞 Robin Thomas 8/21/2023
你能分享你的代码吗?getItemById()

答:

1赞 Samip 8/21/2023 #1
 const cartItem = await getItemById(item.itemId); 

此时的 cartItem 是一个 Mongoose 文档,而不是一个常规的 JSON 对象。

解决此问题的一种方法是首先将 cartItem 转换为 JSON 字符串,并允许您根据需要修改键值对。

您可以通过以下方式做到这一点:

const cartItemv2 = JSON.stringify(carItem); 

这会将 Mongoose 模型(javascript 值)转换为 JSON 字符串。

如果您希望在将值添加到购物车之前对其进行解析,可以按如下方式实现:

const cartItemv2 = JSON.parse(JSON.stringify(cartItem));

这将构造一个 JavaScript 值/对象,该对象由字符串描述,在本例中为 输出JSON.stringify(cartItem);

1赞 Monarth Sarvaiya 8/21/2023 #2

如果你使用 ,那么你可以用它来获取普通对象。mongooselean()

例如:

const car = await Car.findOne().lean();

然后,您可以添加属性:

car['new_prop'] = 'new_data';

评论

0赞 nimrod serok 8/21/2023
这是此类情况的常见做法(不是所选答案)