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

Posted

技术标签:

【中文标题】使用 golang 和 mgo,如何在 MongoDB 中搜索一系列值?【英文标题】:Using golang and mgo, how do I search for a range of values in MongoDB? 【发布时间】:2012-10-20 22:25:16 【问题描述】:

我完成了mgo homepage 上的示例,但我正在努力寻找一种方法来查询一系列值。热线: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】:

行:

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)

【讨论】:

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

以上是关于使用 golang 和 mgo,如何在 MongoDB 中搜索一系列值?的主要内容,如果未能解决你的问题,请参考以下文章

golang:mgo剖析之Session

使用mgo在mongo中删除所有早于使用_id的日期的文档

labix.org/mgo 连接池泄漏问题

使用 mgo 存储嵌套结构

哪个库更高效“gopkg.in/mgo.v2”或“go.mongodb.org/mongo-driver/mongo”[关闭]

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