package repo import ( "fmt" "mats/utils" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) func CategoryExtend(categories []string, ctx *RepoSession) []string { out := []string{} cateIds := []primitive.ObjectID{} for _, cate := range categories { id, _ := primitive.ObjectIDFromHex(cate) cateIds = append(cateIds, id) } ok, cateItems := RepoSeachDocsMap(ctx, &DocsSearchOptions{CollectName: CollectionLibCategory, Query: Map{"_id": bson.M{"$in": cateIds}}, Project: []string{"orderId", "type"}}) if !ok { return out } filters := []bson.M{} for _, item := range cateItems { orderId := item["orderId"].(int64) //ok, cateItems := RepoSeachDocsMap(ctx, &DocsSearchOptions{CollectName: CollectionLibCategory, Query: Map{"_id": bson.M{"$in": cateIds}}, Project: []string{"orderId", "type"}}) fmt.Println(orderId) minId, maxId := utils.OrderIdRange(orderId) f := bson.M{"orderId": bson.M{"$gte": minId, "$lt": maxId}, "type": item["type"].(string)} filters = append(filters, f) } ok, extendsItems := RepoSeachDocsMap(ctx, &DocsSearchOptions{CollectName: CollectionLibCategory, Query: Map{"$or": filters}, Project: []string{"_id"}}) if !ok { return out } for _, item := range extendsItems { out = append(out, item["_id"].(primitive.ObjectID).Hex()) } fmt.Println(filters) return out } func CategoryExtendList(categories []string, ctx *RepoSession) []map[string]interface{} { out := []map[string]interface{}{} cateIds := []primitive.ObjectID{} for _, cate := range categories { id, _ := primitive.ObjectIDFromHex(cate) cateIds = append(cateIds, id) } ok, cateItems := RepoSeachDocsMap(ctx, &DocsSearchOptions{CollectName: CollectionLibCategory, Query: Map{"_id": bson.M{"$in": cateIds}}, Project: []string{"orderId", "type"}}) if !ok { return out } filters := []bson.M{} for _, item := range cateItems { orderId := item["orderId"].(int64) //ok, cateItems := RepoSeachDocsMap(ctx, &DocsSearchOptions{CollectName: CollectionLibCategory, Query: Map{"_id": bson.M{"$in": cateIds}}, Project: []string{"orderId", "type"}}) fmt.Println(orderId) minId, maxId := utils.OrderIdRange(orderId) f := bson.M{"orderId": bson.M{"$gte": minId, "$lt": maxId}, "type": item["type"].(string)} filters = append(filters, f) } _, extendsItems := RepoSeachDocsMap(ctx, &DocsSearchOptions{CollectName: CollectionLibCategory, Query: Map{"$or": filters}, Project: []string{"name", "type", "parent", "createTime", "type", "value", "level", "orderId"}}) return extendsItems }