Được rồi, có vẻ như bạn đang gặp một loạt vấn đề. Tôi sẽ cố gắng tổng hợp chúng lại.
Vấn đề 1:mã tổng hợp bạn đã cung cấp không biên dịch được.
db.user_movies.aggregate(
{$match : {mobile_no : mobile_no}},
{$unwind: "$movies" },
{$lookup: {from: "movies",localField: "movies",foreignField: "movie_id",as: "bmarks"}},
{$unwind : "$bmarks"},
{$match : {"bmarks.active": 1}},
{$group : { _id : "$_id", movies : {$push : "$bmarks"}, movie_ids: {$push : "$bmarks.movie_id"}}},
{$lookup: {from: "movie_comments", localField: "",foreignField: "movie_id",as: "comments"}},
{$unwind : "$comments"},
{$sort: {time_posted: -1}},
{$group: {_id: '$_id', comments : {$push : "$comments"}}},
Khắc phục:
db.user_movies.aggregate([
{$match : {mobile_no : mobile_no}},
{$unwind: "$movies" },
{$lookup: {from: "movies",localField: "movies",foreignField: "movie_id",as: "bmarks"}},
{$unwind : "$bmarks"},
{$match : {"bmarks.active": 1}},
{$group : { _id : "$_id", movies : {$push : "$bmarks"}, movie_ids: {$push : "$bmarks.movie_id"}}},
{$lookup: {from: "movie_comments", localField: "",foreignField: "movie_id",as: "comments"}},
{$unwind : "$comments"},
{$sort: {time_posted: -1}},
{$group: {_id: '$_id', comments : {$push : "$comments"}}}])
Bây giờ, giả sử bạn đang sử dụng cùng một dữ liệu mà bạn đã cung cấp.
Sự cố 2:{$match : {"bmarks.active": 1}}
không khớp với bất kỳ mục nhập nào.
Khắc phục:{$match : {"bmarks.active": 0}}
Vấn đề 3:Không có trường tra cứu nào được xác định {$lookup: {from: "movie_comments", localField: "",foreignField: "movie_id",as: "comments"}}
Khắc phục:{$lookup: {from: "movie_comments", localField: "movie_ids",foreignField: "movie_id",as: "comments"}}
Vấn đề 4:Không có giai đoạn thư giãn cho movie_ids để tra cứu trước
Khắc phục:{$unwind : "$movie_ids"}
Sự cố 5:Không có trường đăng thời gian nào {$sort: {time_posted: -1}}
Khắc phục:bao gồm trường trước khi sắp xếp
Vì vậy, để tổng hợp mọi thứ lại với nhau, bạn cần tổng hợp để trông giống như cái gì đó bên dưới để trích xuất các nhận xét cho mỗi bộ phim.
db.user_movies.aggregate([
{$match : {mobile_no : mobile_no}},
{$unwind: "$movies"},
{$lookup: {from: "movies",localField: "movies",foreignField: "movie_id",as: "bmarks"}},
{$unwind : "$bmarks"},
{$match : {"bmarks.active": 0}},
{$group : { _id : "$_id", movies : {$push : "$bmarks"}, movie_ids: {$push : "$bmarks.movie_id"}}},
{$unwind : "$movie_ids"},
{$lookup: {from: "movie_comments", localField: "movie_ids",foreignField: "movie_id",as: "comments"}},
{$unwind : "$comments"},
{$group: {_id: '$_id', comments : {$push : "$comments"}}}])
Đầu ra mẫu
{
"_id": ObjectId("5834ecf7432d92675bde9d83"),
"comments": [{
"_id": ObjectId("583d96d7e35f6e9c53c9e894"),
"movie_id": "dallas00",
"comment": "what a great movie."
}, {
"_id": ObjectId("583d96d7e35f6e9c53c9e895"),
"movie_id": "dallas00",
"comment": "awesome movie."
}]
}
Cập nhật:
db.user_movies.aggregate([
{$match : {mobile_no : mobile_no}},
{$unwind: {path: "$movies", includeArrayIndex: "moviePosition"}},
{$sort : {moviePosition:1}},
{$lookup: {from: "movies",localField: "movies",foreignField: "movie_id",as: "bmarks"}},
{$unwind :"$bmarks"},
{$group : {_id : "$_id", movies : {$push : {movie_name:"$bmarks.movie_name", movie_id:"$bmarks.movie_id"} }}},
{$unwind : "$movies"},
{$lookup: {from: "movie_comments", localField: "movies.movie_id",foreignField: "movie_id",as: "comments"}},
{$unwind : "$comments"},
{$group: {_id: "$movies.movie_id", movie_name: {$first:"$movies.movie_name"}, comments : {$push : {comment:"$comments.comment", time_posted:"$comments.time_posted"}}}},
{$sort : {time_posted:-1}},
{$project:{_id:0, movie_id:"$_id", movie_name:1, comments: "$comments.comment"}}
]).pretty();