Using golang and mgo, how do I search for a range of values in MongoDB?
11,213
The line:
searchResults, searchErr = SearchReading(bson.M{"k": key, "t": { $gte: start, $lte: end } }, limit)
needs to change to:
searchResults, searchErr = SearchReading(bson.M{"k": key, "t": bson.M{"$gte": start, "$lte": end}}, limit)
Author by
Jaco Briers
Updated on June 23, 2022Comments
-
Jaco Briers almost 2 years
I worked through the example on the mgo homepage, but I'm struggling to find a way to query a range of values. The line:
searchResults, searchErr = SearchReading(bson.M{"k": key, "t": { $gte: start, $lte: end } }, limit)
fails with:
line67: syntax error: unexpected $
line67: missing type in composite literal
I left out the non-essential bits of code...
type Reading struct { K string "k" T int64 "t" V float64 "v" } func SearchReading(q interface{}, limit int) (searchResults []Reading, searchErr string) { searchErr = "" searchResults = []Reading{} query := func(c *mgo.Collection) error { fn := c.Find(q).Limit(limit).All(&searchResults) if limit < 0 { fn = c.Find(q).All(&searchResults) } return fn } search := func() error { return withCollection("reading", query) } err := search() if err != nil { searchErr = "Database Error" } return } func GetReadingsForKey(key string, start int64, end int64, limit int) (searchResults []Reading, searchErr string) { searchResults, searchErr = SearchReading(bson.M{"k": key, "t": { $gte: start, $lte: end } }, limit) return }