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)
Share:
11,213
Jaco Briers
Author by

Jaco Briers

Updated on June 23, 2022

Comments

  • Jaco Briers
    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
    }