#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. Да, это сработало.. это моя вина, мне была создана какая-то функция, вот почему…