我的数据库中有一些名为“事件”的实体。每个事件都包含一个字符串数组,称为“tags”。
我想进行查询以获取与我将在参数中给出的标签数组匹配的所有事件。
但是,我希望这些事件的排序如下:
第一个是包含我在参数中给出的大部分标签的。
第二个是包含我在参数中给出的大部分标签的第二个。
等等。
如果有多个事件包含相同数量的标签,我希望它们按“名称”属性按字母顺序排序。
例子:
"name" = "event1", "tags" = ["食物", "音乐", "游戏", "运动"]
“名称”=“事件2”,“标签”=[“游戏”]
“名称”=“事件3”,“标签”=[“音乐”,“运动”]
"name" = "event4", "tags" = ["食物", "音乐", "游戏", "运动"]
"name" = "event5", "tags" = ["music", "sport", "coding"]
“名称”=“事件6”,“标签”=[“编码”]
"name" = "event7", "tags" = ["食物", "游戏", "运动"]
我在本示例的参数中给出的标签数组是:[“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)
但我真的不知道如何像我向你展示的那样对它们进行排序。
千巷猫影
相关分类