2012-10-31 74 views
5

我通过mgo homepage上的示例工作,但我正在努力寻找一种方法来查询一系列值。
line67: syntax error: unexpected $
line67: missing type in composite literal使用golang和mgo,我如何在MongoDB中搜索一系列值?

我离开了代码的非必需位...

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 
} 

回答

12

行:

searchResults, searchErr = SearchReading(bson.M{"k": key, "t": { $gte: start, $lte: end } }, limit) 
该行:
searchResults, searchErr = SearchReading(bson.M{"k": key, "t": { $gte: start, $lte: end } }, limit)
失败

需要更改为:

searchResults, searchErr = SearchReading(bson.M{"k": key, "t": bson.M{"$gte": start, "$lte": end}}, limit) 
+4

请接受您自己的回答来标记已回答的问题。你也可以添加一个简短的解释,例如,'$ gte'被解释为变量,它在开始时不能有'$',这就是编译器抱怨意外字符的原因。 – nemo

+0

谢谢,SO不允许我在发帖问题的两天内接受我自己的回答,但会尽快完成 –

+0

我认为现在是时候了。 – fabrizioM