func GetComboPackFeedbackData(col string, id bson.ObjectId) ([]ComboFeedbacksData, error) { var comboFeedbacks []ComboFeedbacksData var customQuery mongowrapper.Query pipeline := []bson.M{ bson.M{mongo.MONGO_KEYWORD_MATCH: bson.M{KEY_PRODUCT_ID: id}}, bson.M{mongo.MONGO_KEYWORD_PROJECT: bson.M{"title": 1, "testPacks": "$items"}}, bson.M{mongo.MONGO_KEYWORD_UNWIND: "$testPacks"}, bson.M{ mongo.MONGO_KEYWORD_LOOKUP: bson.M{ mongo.MONGO_KEYWORD_LOOKUP_FROM: TBConstants.COLLECTION_PRODUCT_NAME, mongo.MONGO_KEYWORD_LOOKUP_LOCALFIELD: "testPacks.id", mongo.MONGO_KEYWORD_LOOKUP_FOREIGNFIELD: "_id", mongo.MONGO_KEYWORD_LOOKUP_AS: "testPack", }, }, bson.M{mongo.MONGO_KEYWORD_PROJECT: bson.M{"title": 1, "testPack": bson.M{mongo.MONGO_KEYWORD_ARRAYELEMAT: []interface{}{"$testPack", 0}}}}, bson.M{mongo.MONGO_KEYWORD_UNWIND: "$testPack.items"}, bson.M{mongo.MONGO_KEYWORD_PROJECT: bson.M{ "title": 1, "testPack": 1, "testId": "$testPack.items.id", "testPackId": "$testPack._id", }, }, bson.M{ mongo.MONGO_KEYWORD_LOOKUP: bson.M{ mongo.MONGO_KEYWORD_LOOKUP_FROM: TBConstants.COLLECTION_ENTITY_FEEDBACKS_NAME, mongo.MONGO_KEYWORD_LOOKUP_LOCALFIELD: "testPack.items.id", mongo.MONGO_KEYWORD_LOOKUP_FOREIGNFIELD: "docId", mongo.MONGO_KEYWORD_LOOKUP_AS: "feedbacks", }, }, bson.M{mongo.MONGO_KEYWORD_UNWIND: bson.M{ mongo.MONGO_KEYWORD_UNWIND_PATH: "$feedbacks", mongo.MONGO_KEYWORD_UNWIND_PRESERVE: true, }, }, bson.M{mongo.MONGO_KEYWORD_GROUP: bson.M{ "_id": "$testId", "title": bson.M{mongo.MONGO_KEYWORD_FIRST: "$title"}, "testPackTitle": bson.M{mongo.MONGO_KEYWORD_FIRST: "$testPack.title"}, "testPackId": bson.M{mongo.MONGO_KEYWORD_FIRST: "$testPackId"}, "avgRating": bson.M{mongo.MONGO_KEYWORD_AVG: "$feedbacks.rating"}, }, }, bson.M{mongo.MONGO_KEYWORD_GROUP: bson.M{ "_id": "$testPackId", "title": bson.M{mongo.MONGO_KEYWORD_FIRST: "$title"}, "testPackTitle": bson.M{mongo.MONGO_KEYWORD_FIRST: "$testPackTitle"}, "testIds": bson.M{mongo.MONGO_KEYWORD_PUSH: "$_id"}, "avgRatings": bson.M{mongo.MONGO_KEYWORD_PUSH: "$avgRating"}, "tp_avgRating": bson.M{mongo.MONGO_KEYWORD_AVG: "$avgRating"}, }, }, } err := customQuery.C(col).Pipe(pipeline).AllowDiskUse().All(&comboFeedbacks) return comboFeedbacks, err }