使用golang和mgo,我如何在MongoDB中搜索一系列值?

6
我按照您的要求翻译如下:
我已经按照mgo主页上的示例进行了操作,但是我无法找到一种查询数值范围的方法。以下代码行:
searchResults, searchErr = SearchReading(bson.M{"k": key, "t": { $gte: start, $lte: end } }, limit)
出现错误:
line67: syntax error: unexpected $
line67: missing type in composite literal
我省略了代码中的非必要部分...
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
}
1个回答

12

这条代码:

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)

4
请接受您自己的答案以标记此问题已解决。您还可以添加一个简短的说明,例如,$gte 被解释为变量,不能以 $ 开头,这就是编译器抱怨意外字符的原因。 - nemo
谢谢,SO不允许我在发布问题后的两天内接受自己的答案,但我会尽快处理。 - Jaco Briers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接