db.getCollection('products').aggregate([
{$match : {"_id": ObjectId("5c4a08a1fdb8bb16d8afecdf")}},
{$unwind: "$items"},
{$unwind: "$items.modules"},
{$unwind : "$items.modules.subjects"},
{$group : {
_id : "$items.modules.subjects",
"modules": {$addToSet : "$items.modules"}
}
}
])
// GOlang code
+type CourseSubjects struct{
+ SubjectId bson.ObjectId `bson:"_id" json:"subject_id"`
+ Modules []models.ProductModule `bson:"modules" json:"modules"`
+ SubjectName string `bson:"name" json:"name"`
+}
+
func GetClassFilters(classId bson.ObjectId) (map[string]int, error) {
// TODO: Get from redis if cached
filtersMap := make(map[string]int)
@@ -52,3 +61,27 @@ func GetClassFilters(classId bson.ObjectId) (map[string]int, error) {
return filtersMap, nil
}
+
+
+// Function to get subjects from subjects tagged in module
+func GetSubjectFilters(classId bson.ObjectId) ([]CourseSubjects, error){
+ keyModules := strings.Join([]string{models.KEY_PRODUCT_ITEMS, models.KEY_PRODUCT_ITEM_MODULES}, ",")
+ keyModulesSubjects := strings.Join([]string{models.KEY_PRODUCT_ITEMS, models.KEY_PRODUCT_ITEM_MODULES, models.KEY_MODULE_SUBJECTS}, ",")
+ pipe := []bson.M{
+ bson.M{mongo.MONGO_KEYWORD_MATCH: bson.M{models.KEY_PRODUCT_ID: classId}},
+ bson.M{mongo.MONGO_KEYWORD_UNWIND : models.KEY_PRODUCT_ITEMS},
+ bson.M{mongo.MONGO_KEYWORD_UNWIND: keyModules},
+ bson.M{mongo.MONGO_KEYWORD_UNWIND: keyModulesSubjects},
+ bson.M{
+ mongo.MONGO_KEYWORD_GROUP: bson.M{
+ mongo.MONGO_KEY_ID: keyModulesSubjects,
+ "modules": bson.M{mongo.MONGO_KEYWORD_ADDTOSET: mongo.MONGO_KEY_VAR_PREFIX + keyModules},
+ },
+ },
+ }
+
+ productsCol := models.GetProductCollection()
+ var result []CourseSubjects
+ err := mongowrapper.PipeAllDoc(productsCol, pipe, &result)
+ return result, err
+}
Comments