MgO objectidhex है, जो नहीं करता है MongoDB द्वारा पढ़ा पाने के लिए लग रहे हैं ObjectId स्थापित कर रही है

वोट
0

मैं एक प्रश्न ObjectId का उपयोग कर बनाने की कोशिश कर रहा हूँ, और MongoDB में सामान्य रूप से आप कुछ इस तरह करना होगा

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

जो इस काम करता है जब मैं एक सामान्य प्रश्न है, लेकिन जाने लैंग में यह इसके बारे में मूल्य देता है

ObjectIdHex(5d9d90e5ed645489aae6df64)

बजाय एक वैध क्वेरी लिए नेतृत्व नहीं करता है।

कई बार मैं MgO प्रलेखन के माध्यम से पढ़ा है उपयोग करने की कोशिश

bson.ObjectId(5d9d90e5ed645489aae6df64)

लेकिन यह अभी भी यह एक हेक्स जो मुझे समझ नहीं आता बनाता है। मुझे पता नहीं के साथ चीजों में से कुछ अलग संयोजन की कोशिश की है जैसे वे काफी सिर्फ अंधेरे में शॉट्स थे।

जाओ लैंग हैंडलर

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

जाओ लैंग 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`
}

जाओ लैंग कार्य

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
}
09/10/2019 को 12:53
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

ध्यान दें कि labix.org/v2/mgoअब और नहीं रखा है, तो आप उपयोग करना चाहते हैं mgo, का उपयोग github.com/globalsign/mgoकरने के बजाय। या नए, सरकारी मोंगो-जाने ड्राइवर

bson.ObjectIdएक प्रकार चल रहा है stringउसके अंतर्निहित प्रकार के रूप में:

type ObjectId string

तो जब आप इस तरह से अपनी वस्तु को भरने:

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

bson.ObjectId(request.FormValue("_id"))"कुछ नहीं" तो एक प्रकार है रूपांतरण । आप हेक्स ऑब्जेक्ट ID स्ट्रिंग में बदलने का bson.ObjectIdहै, लेकिन यह है नहीं कि आप क्या चाहते। आप करना चाहते हैं पार्स हेक्स वस्तु आईडी। उसके लिए, का उपयोग समारोह :bson.ObjectIdHex()

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

ध्यान दें कि bson.ObjectIdHex()यदि स्ट्रिंग पारित गलत हेक्स आईडी वस्तु है आतंक होगा। का प्रयोग करें bson.IsObjectIdHex()यह पहले बुला लिए जाँच करने के लिए bson.ObjectId()। जानकारी के लिए, bson.ObjectIdHex में रोकें क्रम आतंक

आप के बजाय सरकारी ड्राइवर का प्रयोग करेंगे तो mgo, आप इस्तेमाल कर सकते हैं primitive.ObjectIDFromHex()बनाने के लिए समारोह ObjectId, जैसे:

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,
    // ...
}
09/10/2019 को 13:08
का स्रोत उपयोगकर्ता

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