Как получить только определенный объект из массива объектов в Mongodb

#javascript #mongodb #mongodb-query

Вопрос:

 {
  "data": {
    "category": "mobile",
    "products": [
      {
        "title": "Redmi Note 10 Pro"
      },
      {
        "title": "Redmi Note 100 Profile"
      }
    ]
  },
  "user": {
    "name": "username"
  }
}
 

Как получить только определенный объект.
Mongodb

Мне просто нужен объект, у которого есть категория как "mobile" и название как "Redmi Note 100 Profile"

Ожидаемый результат:

 {
  "data": {
    "category": "mobile",
    "products":{
        "title": "Redmi Note 100 Profile"
      }
  },
  "user": {
    "name": "username"
  }
}
 

Мне просто не нужен этот объект

 {
 "title": "Redmi Note 10 Pro"
}
 

Я использую это, чтобы получить

 db.collection("products").aggregate([{
              "$unwind": "$data"
            },
              {
                "$match": {
                  "data.category": "mobile",
                  "data.products.title": "Redmi Note 100 Profile",
                }
              }])
            .toArray();
 

Но, это дает мне 2 объекта ?

 {
  "data": {
    "category": "mobile",
    "products": [
      {
        "title": "Redmi Note 10 Pro"
      },
      {
        "title": "Redmi Note 100 Profile"
      }
    ]
  },
  "user": {
    "name": "username"
  }
}
 

Как это сделать ?

Ответ №1:

Вы можете использовать aggregate фреймворк с $unwind , чтобы развернуть массив продуктов и $match отфильтровать

Рабочая площадка

 db.collection.aggregate([
  {
    "$unwind": "$data.products"
  },
  {
    "$match": {
      "data.products.title": "Smartphone 1000 Pro Max Ultra Mega"
    }
  }
])
 

Комментарии:

1. я обновил свой код, когда вы ответите. Но это работа для какой-то области, но иногда это не работа. Итак, я отредактировал свой вопрос с моей новой проблемой, пожалуйста, проверьте себя и решите мою проблему.

2. Вы не можете "$unwind": "$data" , так как data это не массив. Тебе нужно это сделать "$unwind": "$data.products"

3. Это сработало, но это не дает объекта «пользователь» и «данные», как я уже упоминал.

4. хорошо, ты хочешь вот так "products": [ ? Я имею в виду товары в массиве, это единственная разница?

5. Да, это сработало.. это моя вина, мне была создана какая-то функция, вот почему…