gpt4 book ai didi

mongodb - mgo 的 insert 方法是否将字段名称从大写更改为小写?

转载 作者:IT王子 更新时间:2023-10-29 01:54:50 25 4
gpt4 key购买 nike

  1. 当使用 mgoGo struct 类型的对象作为文档插入到 MongoDB 数据库的集合中时,字段名称是否自动从大写更改为小写?

  2. 如果是,为什么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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com