MgO este setarea objectId la objectidhex, care doesnt par pentru a obține citit de MongoDB

voturi
0

Încerc să fac o interogare folosind objectId, și în mod normal, în MongoDB v-ar face ceva de genul asta

db.collection.findOne({_id:objectid(5d9d90e5ed645489aae6df64)})

Ceea ce funcționează atunci când fac o interogare normală, dar în du-te lang ea dă valoarea

ObjectIdHex(5d9d90e5ed645489aae6df64)

în schimb, care nu duce la o interogare validă.

Am citit prin documentația de multe ori MgO încearcă să folosească

bson.ObjectId(5d9d90e5ed645489aae6df64)

dar încă un hex pe care eu nu înțeleg face. Am încercat o combinație câteva diferite de lucruri fără ca acestea erau destul de mult doar fotografii în întuneric.

Du-te Lang Handlere

package userhandlers

import (
    log
    net/http
    //fmt
    //go.mongodb.org/mongo-driver/bson/primitive
    //go.mongodb.org/mongo-driver/bson
    labix.org/v2/mgo/bson

    //Services
    databaseservice malikiah.io/services/databaseService
    passwordservice malikiah.io/services/passwordService

    //Structs
    userstructs malikiah.io/structs/userStructs
    databasestructs malikiah.io/structs/databaseStructs
)

func LoginHandler(response http.ResponseWriter, request *http.Request) {
    response.Header().Set(Content-Type, application/json)
    response.WriteHeader(http.StatusOK)

    databaseQuery := databasestructs.Find{
        ID: bson.ObjectId(request.FormValue(_id)),
        MongoCollection: users,
        Criteria: _id,
        CriteriaValue: ,
        FindAll: false,
    }
    log.Println(databaseQuery)
    databaseservice.Login(databaseQuery)
}

Du-te Lang structs

package databasestructs

import (
    //go.mongodb.org/mongo-driver/bson/primitive
    labix.org/v2/mgo/bson
)

type Find struct {
    ID                      bson.ObjectId   `json:_id,omitempty bson:_id,omitempty`
    MongoCollection         string              `json:mongoCollection,omitempty bson:mongoCollection,omitempty`
    Criteria                string              `json:criteria,omitempty bson:criteria,omitempty`
    CriteriaValue           string              `json:criteriaValue,omitempty bson:criteriaValue,omitempty`
    FindAll                 bool                `json:findAll,omitempty bson:findAll,omitempty`
}

Go Funcții Lang

package databaseservice

import (
    context
    log

    //Structs
    userstructs malikiah.io/structs/userStructs
    databasestructs malikiah.io/structs/databaseStructs

    //go.mongodb.org/mongo-driver/bson
    go.mongodb.org/mongo-driver/mongo
    go.mongodb.org/mongo-driver/mongo/options
    gopkg.in/mgo.v2/bson

)

func Find(databaseQuery databasestructs.Find) (result string) {
    // Set client options
    clientOptions := options.Client().ApplyURI(mongodb://localhost:27017)

    // Connect to MongoDB
    client, err := mongo.Connect(context.TODO(), clientOptions)

    // Database name
    db := client.Database(malikiah)
    collection := db.Collection(databaseQuery.MongoCollection)

    if err != nil {
        log.Fatal(err)
    }

    if databaseQuery.Criteria == _id {
        log.Println(databaseQuery.ID)
        result := collection.FindOne(context.TODO(), bson.M{databaseQuery.Criteria: databaseQuery.ID}).Decode(&result)
        log.Println(result)
    } else if databaseQuery.Criteria ==  {

    } else if databaseQuery.FindAll == true {

    } else {

    }
    return
}
Întrebat 09/10/2019 la 12:53
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
2

De notat că labix.org/v2/mgonu mai este întreținut, dacă doriți să utilizați mgo, utilizați în github.com/globalsign/mgoschimb. Sau oficial noul, conducătorul auto Mongo-go .

bson.ObjectIdeste un tip care are stringca tipul său de bază:

type ObjectId string

Deci, atunci când umple obiectul dvs. de genul:

databaseQuery := databasestructs.Find{
    ID: bson.ObjectId(request.FormValue("_id")),
    MongoCollection: "users",
    Criteria: "_id",
    CriteriaValue: "",
    FindAll: false,
}

bson.ObjectId(request.FormValue("_id"))este „nimic mai mult“ , atunci un tip de conversie . Tu converti șir hex obiect ID - ul la bson.ObjectId, dar acest lucru este nu ceea ce vrei. Vrei să analizeze ID - ul obiect hex. Pentru aceasta, utilizați funcția :bson.ObjectIdHex()

databaseQuery := databasestructs.Find{
    ID: bson.ObjectIdHex(request.FormValue("_id")),
    MongoCollection: "users",
    Criteria: "_id",
    CriteriaValue: "",
    FindAll: false,
}

Rețineți că bson.ObjectIdHex()va intra în panică dacă șirul trecut este un ID obiect hex nevalid. Utilizați bson.IsObjectIdHex()pentru a verifica înainte de a apela bson.ObjectId(). Pentru detalii, consultați Prevenirea panică în timpul rulării bson.ObjectIdHex .

Dacă ar folosi driver - ul oficial în loc mgo, ați putea utiliza primitive.ObjectIDFromHex()funcția pentru a crea ObjectId, de exemplu:

id, err := primitive.ObjectIDFromHex(request.FormValue("_id"))
if err != nil {
    // Handle error
    return
}
// If no error, you may use it:
databaseQuery := databasestructs.Find{
    ID: id,
    // ...
}
Publicat 09/10/2019 la 13:08
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more