搜索一个对象数组以匹配来自MongoDB的objectId。

huangapple go评论109阅读模式
英文:

Search an array of objects to match objectId from mongodb

问题

以下是您要翻译的内容:

"我正在尝试通过包含嵌套对象ID的键来搜索对象数组以进行填充。

我的对象


{
  service: 'user',
  isModerator: true,
  isAdmin: true,
  carts: [
    {
      _id: 5e1344dcd4c94a1554ae0191,
      qty: 1,
      product: 5e09e4e0fcda6f268cefef3f,
      user: 5e0dda6d6853702038da60f0,
      expireAt: 2020-01-06T14:31:56.708Z,
      __v: 0
    },
    {
      _id: 5e13455306a54b31fc71b371,
      qty: 1,
      product: 5e09e507fcda6f268cefef40,// object ID
      user: 5e0dda6d6853702038da60f0,
      expireAt: 2020-01-06T14:33:55.573Z,
      __v: 0
    },
  ],

我想要匹配 carts 数组,以确定用户是否正在添加包含在其中的产品,以便不重复添加,而是增加现有产品的数量。

我的代码

  const itemId = req.body._id;
  const userId = req.user._id;
  const { qty } = req.body;
  try {
    const producto = await Product.findById(itemId);
    const user = await User.findById(userId).populate({
      path: 'carts',
    });
    const result = user.carts.find((o) => {
      console.log(typeof o.product) // 返回对象
      console.log(typeof producto._id); // 返回对象
      return o.product === producto._id
    });
    console.log(result); // 返回 undefined
    if (result !== undefined) {
      const foundCart = await Cart.findById(result._id);
      foundCart.qty += qty;
      await foundCart.save();
      return res.json({ message: 1 });
    }
    const newCart = new Cart({
      qty,
      product: producto,
      user,
    });
    const cart = await newCart.save();
    user.carts.push(cart);
    await user.save();
    return res.json({ message: 1 });
  } catch (error) {
    return console.log(error);
  }
英文:

I'm trying to search an array of objects by a key that contains nested object id for populating.

My object


{
  service: 'user',
  isModerator: true,
  isAdmin: true,
  carts: [
    {
      _id: 5e1344dcd4c94a1554ae0191,
      qty: 1,
      product: 5e09e4e0fcda6f268cefef3f,
      user: 5e0dda6d6853702038da60f0,
      expireAt: 2020-01-06T14:31:56.708Z,
      __v: 0
    },
    {
      _id: 5e13455306a54b31fc71b371,
      qty: 1,
      product: 5e09e507fcda6f268cefef40,// object ID
      user: 5e0dda6d6853702038da60f0,
      expireAt: 2020-01-06T14:33:55.573Z,
      __v: 0
    },
  ],

I want to match if carts array, contains cart with a product that user is adding, to not add it the second time but instead increment qty of the existing one.


My code

  const itemId = req.body._id;
  const userId = req.user._id;
  const { qty } = req.body;
  try {
    const producto = await Product.findById(itemId);
    const user = await User.findById(userId).populate({
      path: 'carts',
    });
    const result = user.carts.find((o) => {
      console.log(typeof o.product) // returns object
      console.log(typeof producto._id); // returns object
      return o.product === producto._id
    });
    console.log(result); // returns undefined
    if (result !== undefined) {
      const foundCart = await Cart.findById(result._id);
      foundCart.qty += qty;
      await foundCart.save();
      return res.json({ message: 1 });
    }
    const newCart = new Cart({
      qty,
      product: producto,
      user,
    });
    const cart = await newCart.save();
    user.carts.push(cart);
    await user.save();
    return res.json({ message: 1 });
  } catch (error) {
    return console.log(error);
  }

答案1

得分: 2

I think the problem is this line

  return o.product === producto._id

Can you change it like this and try?

  return o.product.toString() === producto._id.toString()
英文:

I think the problem is this line

  return o.product === producto._id

Can you change it like this and try?

  return o.product.toString() === producto._id.toString()

huangapple
  • 本文由 发表于 2020年1月6日 22:51:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/59614164.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定