nickzuck_007 icon

Combo Pack Aggregation

nickzuck_007 | PRO | 03/25/19 11:57:17 AM UTC | 0 ⭐ | 514 👁️ | Never ⏰ | []
Go |

2.47 KB

|

None

|

0 👍

/

0 👎

 
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