douxuan3095 2015-04-11 14:42
浏览 119


I'm able to insert an entry into MongoDB using the golang driver and but I'm not able to pull it out. In the mongo shell, if I do

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

it shows me the entry that I just inserted with the Go code. However, if I try to do the following to fetch it in Go, it's telling me that the record isn't found

    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")

One thing I noticed was that, in the shell, the date is stored as a NumberLong

 "date" : NumberLong("1428762411980")

I'm wondering if I have to do something with the date value that I receive from the form in the fetch function before using it to query the database?


Before saving the data to the db, it comes in as a json string like this


I then decode it into a struct

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

And it gets saved like this (as shown in the shell)

 "date" : NumberLong("1428762411980")
  • 写回答

1条回答 默认 最新

  • dqzuo0327 2015-04-11 17:02

    r.FormValue returns a string, but you need an int64. Use strconv.ParseInt. Then your query should work.

    date, err := strconv.ParseInt(r.FormValue("date"), 10, 64)
    // handle err
    err = Items.Find(bson.M{"date":date}).One(&result)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?



  • ¥15 Arduino,利用modbus的RS485协议,进行对外置的温湿度传感器进行数据读取
  • ¥15 vhdl+MODELSIM
  • ¥20 simulink中怎么使用solve函数?
  • ¥30 dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,求解决办法
  • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
  • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
  • ¥15 知识蒸馏实战博客问题
  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么