#node.js #mongodb #mongoose
#node.js #mongodb #мангуст
Вопрос:
Я использую мангуст для запроса моих видеоданных, и это то, что я получаю в ответ
{
"data": [
{
"_id": "5f4e1bcc39d8e31964c662b2",
"is360": false,
"ratingAllowed": true,
"commentAllowed": false,
"keywords": [
"test",
"cat",
"train"
],
"genre": [
"classical"
],
"similarVideos": [],
"adultLanguage": false,
"isDeleted": false,
"isPublished": true,
"category": "favouriteinfluncer",
"influencerId": "5f3b7a7ac1d21a26b808b97c",
"title": "another test video",
"description": "Testing testing"
},
{
"_id": "5f4f8d127bc7453654c9b88e",
"keywords": [
"ganesh",
"drawing"
],
"genre": [
"classical"
],
"similarVideos": [
"5f4c9522c8d42f0b5a24b9da"
],
"adultLanguage": false,
"isDeleted": false,
"isPublished": true,
"category": "popularvideo",
"influencerId": "5ee4535219c8037fc3c53959",
"title": "Drawing",
"description": " Drawing - Handmade pencil drawing"
}
... array of video objects
]
}
Я хочу сгруппировать свой ответ в соответствии с такими категориями, как
{
“popularvideo”:[{
video1data
}, {
video2data
}, and so on],
“other category”:[{
video1data
}, {
video2data
}, and so on],
and so on
}
Я пробовал группировать с помощью .aggregate()
и $group
. Я смог сгруппировать ответ, но не смог получить массив видео для этой конкретной категории. Как я могу упорядочить массив видеообъектов по категориям.
Ответ №1:
Вы можете сделать это так,
$group
с помощьюcategory
и вставьте документ вvideos
поле$group
с помощью null создайте корневой массив по k и v, потому что ниже мы преобразуем в ключ и значение- $replaceWith для замены корневого документа после преобразования $arrayToObjet
db.collection.aggregate([
{
$group: {
_id: "$category",
videos: { $push: "$$ROOT" }
}
},
{
$group: {
_id: null,
videos: {
$push: {
k: "$_id",
v: "$videos"
}
}
}
},
{
$replaceWith: { $arrayToObject: "$videos" }
}
])
Комментарии:
1. спасибо, это то, что я хотел. Я настолько новичок, что не знал о $replaceWith и $ arrayToObject. 😀
2. добавлена справочная ссылка для этого, вы можете узнать больше об этом.
3. что, если у меня есть поле ObjectId
videoId
внутри видеоданных? Как мне его заполнить? я попытался использовать $lookup, но получил пустой ответ4. преобразуйте этот идентификатор строки в идентификатор объекта, используя $toObjectId .
5. Я думаю, что я использовал
$lookup
неправильный путь. Я писал$lookup
после$replaceWith
, которое давало мне пустой ответ. Но когда я писал это в начале, он заполнял мой ObjectId. Но спасибо за предложение. 😄