mongodb mgo custom _id - PullRequest
       23

mongodb mgo custom _id

0 голосов
/ 28 мая 2018

Я использовал этот метод для создания / вставки документа:

document5=({"_id": {"date" : 23, "hour" : 11}, "value" : {"avg_cpu" : 2.558333333333333, "avg_cpu_rate" : 18.419999999999998} })db.userdetails2.insert(document5)

, что привело к следующему:

{        "_id" : {                "date" : 23,                "hour" : 11        },        "value" : {                "avg_cpu" : 2.558333333333333,                "avg_cpu_rate" : 18.419999999999998

Как бы я это сделал с golang mgo?

Проблема в том, что мне нужно вставить данные в _id, но они не доступны извне.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Спасибо, попробую, однако я это придумал и все работает:

package main

import (
    "fmt"
    "time"

    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
)

//const MongoDb details
const (
    hosts      = "xxxxx:27017"
    database   = "xxxx"
    username   = "xxxx"
    password   = "xxxx"
    collection = "xxxx"
)

type UserDetails struct {
    Id    IdType
    Value ValueType
}

type IdType struct {
    Date string
    Hour string
}

type ValueType struct {
    Name  string
    Phone string
}

func main() {

    info := &mgo.DialInfo{
        Addrs:    []string{hosts},
        Timeout:  60 * time.Second,
        Database: database,
        Username: username,
        Password: password,
    }

    session, err1 := mgo.DialWithInfo(info)
    if err1 != nil {
        panic(err1)
    }

    col := session.DB(database).C(collection)
    datab := session.DB(database)

    count, err2 := col.Count()
    if err2 != nil {
        panic(err2)
    }

    //Write Data//
    item := UserDetails{Id: IdType{Date: "23", Hour: "13"}, Value: ValueType{Name: "some-name", Phone: "123 333"}}

    _, err := col.Upsert(bson.M{"_id": item.Id}, bson.M{"Value": item.Value})

    if err != nil {
        panic(err)
    }

    //Read Data//
    var userDetail []bson.M
    //#1 Search a document with Name= xxxx
    //_ = col.Find(bson.M{"Name": "xxxx"}).All(&userDetail)

    //#2 Search All documents
    _ = col.Find(nil).All(&userDetail)
    for _, v := range userDetail {
        fmt.Println(v)
    }

}
0 голосов
/ 30 мая 2018

Если я понял, что вы пытаетесь сделать правильно, это должно сработать.

type (
    IdRec struct {
        Date int `bson:"date"`
        Hour int `bson:"hour"`
    }

    CpuRec struct {
        AvgCpu     float64 `bson:"avg_cpu"`
        AvgCpuRate float64 `bson:"avg_cpu_rate"`
    }

    DocRec struct {
        ID    IdRec  `bson:"_id"`
        Value CpuRec `bson:"value"`
     }
)

    func saveRecord(){
        newRec := DocRec{}
        newRec.ID.date = 23
        newRec.ID.hour = 11
        newRec.Value.AvgCpu = 2.558333333333333
        newRec.Value.AvgCpuRate = 18.419999999999998

        session := MongoSession.Copy()
        defer session.Close()

        theCollection := session.DB(DbName).C(CollectionName)
        err := theCollection.Insert(&newRec)
        if err != nil {
            doSomething(err)
        }
    }
...