2

I have an issue with array object.

    "userId": "63317e7f9746ba9719845b6e",
    "items": [
        {
            "productId": "Z357",
            "piece": 1,
            "_id": "63333427d7ea226b2462e734"
        },
        {
            "productId": "A541",
            "piece": 1,
            "_id": "6333342cd7ea226b2462e738"
        },
        {
            "productId": "G31",
            "piece": 1,
            "_id": "633334ea1ca2b582ddd0bc62"
        },
        {
            "productId": "K1123",
            "piece": 1,
            "_id": "6333351028b43b58b8f83ba3"
        }
    ],

I have an array like that. I want to get specific item with productId,

const checker = await Cart.findOne({
      "items.productId": productId,
    });

I'm checking an array like that, but it's giving me all of the items that contain productId, how can I get only what am I filter?

iamtbay
  • 41
  • 3
  • I think this answer can solve your poblem. https://stackoverflow.com/questions/14040562/how-to-search-in-array-of-object-in-mongodb – Neeraj Kumar Sep 28 '22 at 10:52

1 Answers1

2

You can try this way with projection to get only the matched element where your productId is equal to the provided productId,

const checker = await Cart.findOne({items:{ $elemMatch:{ productId: productId}}},
  {userId:1,"items.$": 1});
A l w a y s S u n n y
  • 36,497
  • 8
  • 60
  • 103