Wenn
mgo
mit einem Objekt einesGo
struct
Typs in eine Sammlung in einer Datenbank als MongoDB Dokument einzufügen, sind die Feldnamen aus Großbuchstaben geändert Fall automatisch zu senken?Ändert die Insert-Methode von mgo Feldnamen von Großbuchstaben in Kleinbuchstaben?Wenn ja, warum macht die Einfügemethode von
mgo
das?
Danke.
Hier ist mein Go
Programm, das mgo
verwendet weist darauf hin,
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)
}
Der Ausgang des Laufens seine kompilierte Programm auszuführen
$ ./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
Durch den Anschluss auf den MongoDB-Server von seiner Shell aus, fand ich, dass die Feldnamen in dem eingefügten Dokument von Großbuchstaben Anfangsbuchstaben zu h geändert haben aving Klein ersten Buchstaben
$ 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 }
Also in meinem Go
Programm, änderte ich
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
und es gibt ein passendes Dokument
$ ./minimal-example
count:100