gpt4 book ai didi

mongodb - 使用 Golang mgo 进行用户搜索

转载 作者:IT王子 更新时间:2023-10-29 02:03:27 27 4
gpt4 key购买 nike

获取字符串作为输入(来自用户搜索),我正在尝试为 mgo 构建一个 bson.M 对象以搜索 mongo 数据库并找到 x项目数。

像这样

func Search (w http.ResponseWriter, r *http.Request) {

q := r.FormValue("q")
filter := bson.M{}
// magic happens here

// do db connection stuff
things := []*thing{}
err := db.Find(&filter).Limit(10).All(&things)
// check error, send things, etc
}

我需要搜索依据的是

  • 忽略大小写(我找到了 this answer,这让我参与其中)
  • 存储数据中的title 必须在某处包含q 中的每个单词。

例如,如果存储的数据看起来像{title: "abcde"},那么

  • Abc 将匹配
  • de Bc 将匹配
  • ac 不匹配

编辑:解决方案

我终于明白了。神奇的部分看起来像这样:

q := r.FormValue("q")
qs := strings.Split(q, " ")
and := make([]bson.M, len(qs))
for i, q := range qs {
and[i] = bson.M{"title": bson.M{
"$regex": bson.RegEx{Pattern: ".*" + q + ".*", Options: "i"},
}}
}
filter := bson.M{"$and": and}

最佳答案

mongo过滤器可以采用正则表达式,例如;

        bson.M{"title": bson.M{"$regex": bson.RegEx{Pattern: title, Options: "i"}}}

所以在这种情况下,标题变量应该是这样的; .*abc*.。选项:“i”启用不区分大小写。

至于匹配子字符串(场景 2),我不确定如何在正则表达式中实现。

关于mongodb - 使用 Golang mgo 进行用户搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com