Как искать документы в mongodb, используя драйвер GoLang mongodb, где значением в документе является строка, а в фильтре есть фрагмент строки? - PullRequest
0 голосов
/ 28 апреля 2020

Я не могу сформулировать весь вопрос в заголовке, поэтому вот он:

У меня есть фрагмент строк 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})

1 Ответ

0 голосов
/ 28 апреля 2020

Вы можете использовать:

// 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)
        }
    }
...