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
}
Comments