登录
首页 >  Golang >  Go问答

在GoLang中使用mongodb驱动程序进行文档搜索,文档值为字符串,过滤器为字符串切片的方法

来源:stackoverflow

时间:2024-03-06 08:15:25 167浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《在GoLang中使用mongodb驱动程序进行文档搜索,文档值为字符串,过滤器为字符串切片的方法》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我无法在标题中列出我的整个问题,所以这里是:

我有一段字符串 var temp = []string{"abc","efg","xyz"}

现在我想在集合中的文档中搜索上述切片中的每个元素。

我知道我可以做这样的事情:

for _, str:=range temp{
   collection.find(context.background(), bson.m{"key":str})
}

但正如你所看到的,我将不得不发出许多查询。

有没有一种解决方案可以让我通过一次查询来查找所有这些文档 例如:

err = collection.Find(context.Background(), bson.M{"key":  MY_SLICE_OF_STRING})

解决方案


您可以使用:

// I'm not sure what is your struct, so I use bson.Raw for this example
// but you can parse into your struct in the loop.
    resultQuery := make([]bson.Raw, 0)
// you can use bson.M if you like, 
// filter := bson.M{"key": bson.M{"$in": MY_SLICE_OF_STRING}}
    filter := bson.D{
        {
            Key: "key",
            Value: bson.E{
                Key:   "$in",
                Value: MY_SLICE_OF_STRING,
            },
        },
    }
    ctx := context.background()
    cursor, err := collection.Find(ctx, filter)
    if err != nil {
        //Handle your error.
    }
    if err == nil {
        // you should put defer function to close your cursor,
        defer func() {
            cursor.Close(ctx)
        }()
        for cursor.Next(ctx) {
            resultQuery = append(resultQuery, cursor.Current)
        }
    }

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>