按 mongodb 中的日期查询
query by date in mongodb
我可以使用 golang 驱动程序 gopkg.in/mgo.vs
和 gopkg.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")
r.FormValue
returns 一个字符串,但你需要一个 int64。使用 strconv.ParseInt。那么您的查询应该有效。
date, err := strconv.ParseInt(r.FormValue("date"), 10, 64)
// handle err
err = Items.Find(bson.M{"date":date}).One(&result)
我可以使用 golang 驱动程序 gopkg.in/mgo.vs
和 gopkg.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")
r.FormValue
returns 一个字符串,但你需要一个 int64。使用 strconv.ParseInt。那么您的查询应该有效。
date, err := strconv.ParseInt(r.FormValue("date"), 10, 64)
// handle err
err = Items.Find(bson.M{"date":date}).One(&result)