nickzuck_007 icon

Get subject modules

nickzuck_007 | PRO | 05/24/19 10:37:23 AM UTC | 0 ⭐ | 335 👁️ | Never ⏰ | []
JSON |

2.11 KB

|

None

|

0 👍

/

0 👎

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