I can't get the official go mongo driver to successfully return objects that are queried via a regex query.
I already know how to do it via the mongo shell and get my expected results. With this example i get all entries that contain "he" in their 'text' field:
db.getCollection('test').find({"text": /he/})
same with this one:
db.getCollection('test').find({"text": {$regex: /he/, $options: ''}})
This is my current code that doesn't work:
package main
import (
"context"
"fmt"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(5*time.Second))
defer cancel()
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil {
fmt.Println(err)
return
}
err = client.Connect(ctx)
if err != nil {
fmt.Println(err)
return
}
db := client.Database("test")
coll := db.Collection("test")
filter := bson.D{{"text", primitive.Regex{Pattern: "/he/", Options: ""}}}
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
cur, err := coll.Find(ctx, filter)
if err != nil {
fmt.Println(err)
return
}
i := 0
for cur.Next(ctx) {
i = i + 1
}
fmt.Println("Found", i, "elements")
}
Per example in the official mongo-go-driver repository, this should work.
My current entries in the collection just contain 2 fields, the id field and an extra text field. I currently have 3 entries. that look like this:
{
"_id" : ObjectId("5c9cc7e9950198ceeefecbdd"),
"text" : "hello world"
},
{
"_id" : ObjectId("5c9cc7f6950198ceeefecbec"),
"text" : "hello"
},
{
"_id" : ObjectId("5c9cc804950198ceeefecbfa"),
"text" : "test world"
}
My expected results with the code from above, should be the first 2 entries. Instead i get an empty cursor back.
Does anybode know, what i am doing wrong? Thanks for your help.
primitive.Regex
struct accepts Pattern
value without slashes, so it must be:
filter := bson.D{{"text", primitive.Regex{Pattern: "he", Options: ""}}}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With