我的数据库中有一些名为"events"的实体。这些事件中的每一个都包含一个字符串数组,称为"tags"。
我想进行查询以获取与我将在参数中给出的标签数组匹配的所有事件。
但是,我希望这些事件的排序如下:
第一个是包含我在参数中给出的大部分标签的那个。
第二个是包含我在参数中给出的大部分标签的第二个。
等等。
如果有多个事件包含相同数量的标签,我希望它们按其“名称”属性按字母顺序排序。
例子:
“名称” = “事件 1”、“标签” = [“食物”、“音乐”、“游戏”、“运动”]
“名称” = “事件 2”,“标签” = [“游戏”]
“名称” = “事件 3”、“标签” = [“音乐”、“运动”]
“名称” = “事件 4”、“标签” = [“食物”、“音乐”、“游戏”、“运动”]
“名称” = “事件 5”、“标签” = [“音乐”、“运动”、“编码”]
“名称” = “事件 6”,“标签” = [“编码”]
“名称” = “事件 7”、“标签” = [“食物”、“游戏”、“运动”]
我在这个例子的参数中给出的标签数组是:["food", "music", "gaming", "sport"]
此示例的结果将是一个事件数组,按顺序包含: event1, event4, event7, event3, event5, event2
要获取包含标签的所有事件,我只需使用“$or”运算符进行查询。如果它们至少包含参数中给出的标签之一,这使我可以获取所有事件。
代码:
var events []model.Event
var MyQuery []map[string]interface{}
for i := 0; i < len(tags); i++ {
currentCondition := bson.M{"tags": tags[i]}
MyQuery = append(MyQuery, currentCondition)
}
err := dbEvents.C(collectionEvents).Find(bson.M{"$or": OrQuery}).All(&events)
但我真的不知道如何像我向你展示的那样对它们进行排序。
小唯快跑啊
相关分类