按日期在mongodb中查询

时间:2015-04-11 14:42:17

标签: mongodb go mgo

我可以使用golang驱动程序gopkg.in/mgo.vsgopkg.in/mgo.vs/bson向MongoDB插入一个条目,但我无法将其删除。在mongo shell中,如果我这样做

db.Items.find({ date : 1428762411980 })

它显示了我刚刚使用Go代码插入的条目。但是,如果我尝试在Go中执行以下操作,则会告诉我该记录未找到

    func fetch(w http.ResponseWriter, r *http.Request){
         var result SomeStruct
         date := r.FormValue("date")
         err := Items.Find(bson.M{"date":date}).One(&result)
         ...code omitted...

    }

   func Items() *mgo.Collection {
       return DB().C("Items")
    }

   func DB() *mgo.Database {
      return DBSession().DB("mydb")
    }

我注意到的一件事是,在shell中,日期存储为NumberLong

 "date" : NumberLong("1428762411980")

我想知道在使用它来查询数据库之前,是否必须对fetch函数中的表单中收到的日期值做些什么?

更新

在将数据保存到数据库之前,它以像这样的json字符串形式出现

"date":1428762411980

然后我将其解码为结构

type blah struct{
    Id bson.ObjectId `json:"id" bson:"_id"`
    Date int64 `json:"date" bson: "date"`

它会像这样保存(如shell中所示)

 "date" : NumberLong("1428762411980")

1 个答案:

答案 0 :(得分:1)

r.FormValue返回一个字符串,但是你需要一个int64。使用strconv.ParseInt。然后你的查询应该有效。

date, err := strconv.ParseInt(r.FormValue("date"), 10, 64)
// handle err
err = Items.Find(bson.M{"date":date}).One(&result)