我正在使用MongoDB和mgo作为存储引擎在Go中创建API。 我为GET请求写了一些抽象,允许用户按查询字符串参数中的字段过滤结果,但它只适用于字符串字段。
我正在寻找一种方法来获取只有字段名称的字段类型,以便在搜索集合之前将参数转换为正确的类型。 这是代码:
func (db *DataBase) GetByFields(fields *map[string]interface{}, collection string) ([]DataModel, error) {
var res []interface{}
Debug("Getting " + collection + " by fields: ")
for i, v := range *fields {
Debug("=> " + i + " = " + v.(string))
// Here would be the type checking
}
if limit, ok := (*fields)["limit"]; ok {
limint, err := strconv.Atoi(limit.(string))
if err != nil {...} // Err Handling
delete(*fields, "limit")
err = db.DB.C(collection).Find(fields).Limit(limint).All(&res)
if err != nil {...} // Err Handling
} else {
err := db.DB.C(collection).Find(fields).All(&res)
if err != nil {...} // Err Handling
}
resModel := ComputeModelSlice(res, collection)
return resModel, nil
}
使用mongodb我可以用以下方式检查类型:
db.getCollection('CollectionName').findOne().field_name instanceof typeName
但我找不到用mgo执行此操作的方法。 有什么想法吗?
答案 0 :(得分:1)
我不确定在执行查询之前获取字段类型的方法,但one方法只是查询bson.M
然后对检索到的值进行类型检测:
var res bson.M
// ...
err = db.DB.C(collection).Find(fields).Limit(limint).All(&res)
// ...
for key, val := range res {
switch val.(type) {
case string:
// handle
case int:
// handle
// ...
default:
// handle
}
}