我正在使用MongoDB的mgo驱动程序开发RESTful API .
问题是我正在尝试通过int类型的字段获取文档,并且不返回任何结果 .
例如,我有这个文件:
{
"_id" : ObjectId("5797833e9de6f8c5615a20f9"),
"id" : "28743915-9be0-427d-980d-5009bfe1b13a",
"name" : "Hunter",
"rating" : 2.9,
"downloads" : 5040
}
当试图获取此文档时:
conn.Session.
DB("face").
C("papers").
Find(bson.M{"rating": 2.9}).
All(&papers) // papers is an instance of a slice struct.
它不会返回任何文档,但在mongo shell中执行相同的操作会返回文档,例如:
db.papers.find({"rating": 2.9})
但是在mongo shell中执行此操作不会返回任何文档:
db.papers.find({"rating": "2.9"})
所以我认为问题可能是当bson.M被序列化时,它可能会将值转换为字符串,因为bson.M是map [string] interface {}
这就是Paper结构的样子
type Paper struct {
ID string `json:"id,omitempty" bson:"id"`
Name string `json:"name,omitempty" bson:"name"`
Rating float64 `json:"rating" bson:"rating"`
Downloads int `json:"downloads" bson:"downloads"`
}
1 回答
我试图了解你的问题是什么,不能 . 最令人困惑的部分是你的问题解释
在哪个世界
2.9
是一个整数?没有类型
number
(你在 Headers 中提到过),也没有Go,也没有Mongo .如果要插入带有
mgo
的float64
,它将作为double插入到Mongo中您无法使用
string
查询查询double
. 所以db.papers.find({"rating": 2.9})
返回文档和db.papers.find({"rating": "2.9"})
- 不是,即使有一些"rating": 2.9
的文档 .mgo
和mongo
中没有错误 . 如果您有兴趣,这里是插入map并使用Paper
类检索数据的示例代码: