Один из способов сделать это sh То, что вам нужно, это сделать:
db.getCollection("movie-ratings").aggregate([
{ $unwind: "$ratings" },
])
Это сведет все ваши документы. Пример вывода:
{ "_id" : ObjectId("5eb059141d704dbea32156a9"), "email" : "test1@a.com", "username" : "maintest", "password" : "aaaa", "ratings" : { "name" : "Avengers", "url" : "www.avengers.com", "rating" : 5, "comment" : "Good Movie" } }
{ "_id" : ObjectId("5eb059141d704dbea32156a9"), "email" : "test1@a.com", "username" : "maintest", "password" : "aaaa", "ratings" : { "name" : "Hulk", "url" : "www.avengers.com", "rating" : 2, "comment" : "Good Movie" } }
Кроме того, поскольку вы находитесь внутри агрегата, вы можете применить к нему множество различных операторов агрегатов. Например, вы можете применить оператор сопоставления для фильтрации по заданному заголовку c:
db.getCollection("movie-ratings").aggregate([
{ $unwind: "$ratings" },
{ $match: { 'ratings.name': 'Avengers' } }
])
Подробнее о различных операторах можно прочитать здесь:
https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/
ОБНОВЛЕНИЕ: Используя mon goose, вы можете сделать что-то вроде этого. Предположим, у вас есть модель mon goose под названием Ratings, тогда вы можете сделать:
const aggregate = Ratings.aggregate([
{ $unwind: "$ratings" },
{ $match: { 'ratings.name': 'Avengers' } }
]);
Более подробную информацию о агрегатах с mon goose можно найти здесь:
https://mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate
Надеюсь, это поможет вам.