- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
当使用 mgo
将 Go
struct
类型的对象作为文档插入到 MongoDB 数据库的集合中时,字段名称是否自动从大写更改为小写?
如果是,为什么mgo
的插入方法会那样做?
谢谢。
这是我的 Go
程序,它使用 mgo
在 MongoDB 服务器中执行插入和查询操作
package main
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type Record struct {
Dimension_id int
Attribute string
Hour string
Frequency_count int
}
func main(){
session, err := mgo.Dial("localhost")
if err != nil {
panic(err)
}
defer session.Close()
c := session.DB("TVFS").C("c20160712")
// insert
doc := Record{2, "good", "20160712_06", 100}
err = c.Insert(&doc)
if err != nil {
panic(err)
}
// query
result := Record{}
err = c.Find(bson.M{"Dimension_id": 2, "Attribute": "good", "Hour": "20160712_06" }).One(&result) // no matching document
// err = c.Find(bson.M{"dimension_id": 2, "attribute": "good", "hour": "20160712_06" }).One(&result) // one matching document
if err != nil {
panic(err)
}
fmt.Printf("count:%d\n", result.Frequency_count)
}
运行其编译程序的输出指出
$ ./minimal-example
panic: not found
goroutine 1 [running]:
panic(0x61d500, 0xc82000a880)
/usr/local/go/src/runtime/panic.go:481 +0x3e6
main.main()
/home/t/program_files/mywork/go/src/tvfs/mongodb/minimal-example.go:38 +0x701
通过shell连接MongoDB服务器,发现插入文档中的字段名已经从首字母大写变为首字母小写
$ mongo
MongoDB shell version: 3.2.8
connecting to: test
Server has startup warnings:
2016-08-04T11:58:21.138-0400 I CONTROL [initandlisten]
2016-08-04T11:58:21.138-0400 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-08-04T11:58:21.138-0400 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-08-04T11:58:21.138-0400 I CONTROL [initandlisten]
2016-08-04T11:58:21.139-0400 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-08-04T11:58:21.139-0400 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-08-04T11:58:21.139-0400 I CONTROL [initandlisten]
> show dbs
TVFS 0.000GB
local 0.000GB
> use TVFS
switched to db TVFS
> show collections
c20160712
> db.c20160712.find()
{ "_id" : ObjectId("57a3978491c3b3a393e9be2d"), "dimension_id" : 2, "attribute" : "good", "hour" : "20160712_06", "frequency_count" : 100 }
所以在我的Go
程序中,我改变了
err = c.Find(bson.M{"Dimension_id": 2, "Attribute": "good", "Hour": "20160712_06" }).One(&result) // no matching document
成为
err = c.Find(bson.M{"dimension_id": 2, "attribute": "good", "hour": "20160712_06" }).One(&result) // one matching document
并且有一个匹配的文档
$ ./minimal-example
count:100
最佳答案
字段名称根据 mgo/bson documentation 小写:
The lowercased field name is used as the key for each exported field, but this behavior may be changed using the respective field tag.
使用 bson 字段标记来覆盖 mgo/bson 对结构名称的处理。以下是匹配结构字段名称所需的标记:
type Record struct {
Dimension_id int `bson:"Dimension_id"`
Attribute string `bson:"Attribute"`
Hour string `bson:"Hour"`
Frequency_count int `bson:"Frequency_count"`
}
关于mongodb - mgo 的 insert 方法是否将字段名称从大写更改为小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38778360/
概述 CentOS Stream 成立于 2019 年,是“RHEL 下一步的滚动预览”。Red Hat 首席技术官 Chris Wright 和 CentOS 社区经理 Rich Bowen 各
我有一个使用 Mesosphere DC/OS 编排选项进行配置的 Azure 容器服务 (ACS) 集群。我可以在 Marathon UI 中创建一个应用程序。 但是,当我通过 Marathon U
我是一名优秀的程序员,十分优秀!