第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找按最佳匹配排序的所有元素

查找按最佳匹配排序的所有元素

Go
阿波羅的戰(zhàn)車 2023-08-14 17:02:04
我的數(shù)據(jù)庫中有一些名為“事件”的實體。每個事件都包含一個字符串數(shù)組,稱為“tags”。我想進行查詢以獲取與我將在參數(shù)中給出的標簽數(shù)組匹配的所有事件。但是,我希望這些事件的排序如下:第一個是包含我在參數(shù)中給出的大部分標簽的。第二個是包含我在參數(shù)中給出的大部分標簽的第二個。等等。如果有多個事件包含相同數(shù)量的標簽,我希望它們按“名稱”屬性按字母順序排序。例子:"name" = "event1", "tags" = ["食物", "音樂", "游戲", "運動"]“名稱”=“事件2”,“標簽”=[“游戲”]“名稱”=“事件3”,“標簽”=[“音樂”,“運動”]"name" = "event4", "tags" = ["食物", "音樂", "游戲", "運動"]"name" = "event5", "tags" = ["music", "sport", "coding"]“名稱”=“事件6”,“標簽”=[“編碼”]"name" = "event7", "tags" = ["食物", "游戲", "運動"]我在本示例的參數(shù)中給出的標簽數(shù)組是:[“food”、“music”、“gaming”、“sport”]此示例的結(jié)果將是一個事件數(shù)組,按以下順序包含: event1、event4、event7、event3、event5、event2為了獲取包含標簽的所有事件,我只需使用“$or”運算符進行查詢。這使我能夠獲取所有事件(如果它們至少包含參數(shù)中給定的標簽之一)。代碼:    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)但我真的不知道如何像我向你展示的那樣對它們進行排序。
查看完整描述

1 回答

?
千巷貓影

TA貢獻1829條經(jīng)驗 獲得超7個贊

package main


import (

    "fmt"


    "github.com/ahmetb/go-linq"

)


type T struct {

    Name string

    Tags []string

}


func main() {

    params := []string{"food", "music", "gaming", "sport"}

    t := []T{

        T{Name: "event1", Tags: []string{"food", "music", "gaming", "sport"}},

        T{Name: "event2", Tags: []string{"gaming"}},

        T{Name: "event3", Tags: []string{"music", "sport"}},

        T{Name: "event4", Tags: []string{"food", "music", "gaming", "sport"}},

        T{Name: "event5", Tags: []string{"music", "coding", "sport"}},

        T{Name: "event6", Tags: []string{"coding"}},

        T{Name: "event7", Tags: []string{"food", "gaming", "sport"}},

    }

    var result []T

    linq.From(t).SortT(func(t1 T, t2 T) bool {

        var rs1 []string

        linq.From(t1.Tags).IntersectByT(linq.From(params), func(str string) string {

            return str

        }).ToSlice(&rs1)

        var rs2 []string

        linq.From(t2.Tags).IntersectByT(linq.From(params), func(str string) string {

            return str

        }).ToSlice(&rs2)

        return len(rs1) > len(rs2)

    }).ToSlice(&result)


    fmt.Printf("%+v", result)

}

[{名稱:event1 標簽:[美食音樂游戲運動]} {名稱:event4 標簽:[美食音樂游戲運動]} {名稱:event7 標簽:[美食音樂游戲運動]} {名稱:event3 標簽:[音樂運動]} {名稱:event5 標簽:[音樂編碼運動]} {名稱:event2 標簽:[游戲]} {名稱:event6 標簽:[編碼]}]


上面的程序根據(jù)您的要求對數(shù)組進行排序,希望這會對您有所幫助。


查看完整回答
反對 回復 2023-08-14
  • 1 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號