MgO setter Objekt til objectidhex, som ikke synes å bli lest av Mongodb

stemmer
0

Jeg prøver å lage en spørring ved hjelp av Objekt, og normalt i mongodb du ville gjøre noe sånt som dette

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

Som dette fungerer når jeg gjør en normal spørring, men i farten lang det gir den verdien av

ObjectIdHex(5d9d90e5ed645489aae6df64)

i stedet som ikke fører til en gyldig spørring.

Jeg har lest gjennom MgO dokumentasjon mange ganger prøver å bruke

bson.ObjectId(5d9d90e5ed645489aae6df64)

men det fortsatt gjør det en hex som jeg ikke forstår. Jeg har prøvd noen annen kombinasjon av ting uten at de var ganske mye bare skudd i mørket.

Gå Lang Handlers

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)
}

Gå 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`
}

Gå Lang Funksjoner

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
}
Publisert på 09/10/2019 klokken 12:53
kilden bruker
På andre språk...                            


1 svar

stemmer
2

Merk at labix.org/v2/mgoikke opprettholdes lenger, hvis du ønsker å bruke mgo, bruke github.com/globalsign/mgoi stedet. Eller den nye, offisielle mongo-go sjåfør .

bson.ObjectIder en type som har stringsom dens underliggende Type:

type ObjectId string

Så når du fyller objekt som dette:

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

bson.ObjectId(request.FormValue("_id"))er "noe mer", så en type konvertering . Du konvertere hex objekt ID strengen til bson.ObjectId, men dette er ikke hva du ønsker. Du ønsker å analysere hex objekt-ID. For at du bruke funksjonen :bson.ObjectIdHex()

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

Vær oppmerksom på at bson.ObjectIdHex()vil få panikk hvis passert strengen er ugyldig hex objekt-ID. Bruk bson.IsObjectIdHex()for å sjekke det før du ringer bson.ObjectId(). For detaljer, se Forhindre runtime panikk i bson.ObjectIdHex .

Hvis du vil bruke den offisielle driveren i stedet for mgo, kan du bruke primitive.ObjectIDFromHex()funksjonen for å lage ObjectId, for eksempel:

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,
    // ...
}
Svarte 09/10/2019 kl. 13:08
kilden bruker

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