2013-11-26 9 views
15

साथ MgO का उपयोग कर "_ id" मान यह मेरा struct परिभाषा है:प्राप्त नहीं कर सकते golang

type Article struct { 
    Id  bson.ObjectId `json:"id"  bson:"_id,omitempty"` 
    Title string  `json:"title"` 
    Author string  `json:"author"` 
    Date string  `json:"date"` 
    Tags string  `json:"tags"` 
    Content string  `json:"content"` 
    Status string  `json:"status"` 
} 

इस विधि मैं डेटाबेस से अपने डेटा मिलता है:

func AllArticles() []Article { 
    articles := []Article{} 
    err := c_articles.Find(bson.M{}).All(&articles) 
    if err != nil { 
     panic(err) 
    } 

    return articles 
} 

इस वस्तु में से एक टुकड़ा है

{ "_id" : ObjectId("5281b83afbb7f35cb62d0834"), 
    "title" : "Hello1", 
    "author" : "DYZ", 
    "date" : "2013-11-10", 
    "tags" : "abc", 
    "content" : "This is another content.", 
    "status" : "published" } 

यह मुद्रित परिणाम है:: डेटाबेस में संग्रहीत

[{ObjectIdHex("") Hello1 DYZ 2013-11-10 abc This is another content. published}  {ObjectIdHex("") Hello2 DYZ 2013-11-14 abc This is the content. published}] 

ऐसा लगता है कि मुझे _id फ़ील्ड का वास्तविक मूल्य नहीं मिल सकता है, यह हमेशा "" है। समस्या क्या है?

उत्तर

3

आपका कोड ठीक है।

यहाँ एक आत्म निहित उदाहरण है कि अपने कोड में शामिल हैं, असंशोधित है:

"R\x94\xa4J\xff&\xc61\xc7\xfd%\xcc" "Some Title" 

मुद्दा कहीं और है:

और यहाँ उत्पादन होता है। संग्रह में वास्तव में _id फ़ील्ड नहीं हो सकता है, उदाहरण के लिए।

+0

मैंने सोचा कि '_id' प्रत्येक ऑब्जेक्ट का डिफ़ॉल्ट फ़ील्ड है, है ना? – dyzdyz010

+0

शायद आप अपने लेख गलत डाल रहे हैं। – thwd

+0

@ dyzdyz010 http://goo.gl/M1VsXt –

28

मुझे समस्या मिली है।

कोड में:

Id  bson.ObjectId `json:"id"  bson:"_id,omitempty"` 

json: और bson: के बीच, मैं एक tab बजाय space तो समस्या तब होती है इस्तेमाल किया। अगर मैं करने के लिए कोड की इस पंक्ति को बदलने:

Id  bson.ObjectId `json:"id" bson:"_id,omitempty"` 

साथ json: और bson: के बीच एकspace, यह पता चला है ठीक काम करने के लिए।

+0

मैं इसे विश्वास नहीं कर सकता, मैंने दोपहर बिताए अजीब बग को ठीक करने की कोशिश की, अच्छी खोज! – rendon

+0

एलओएल, मेरी समस्या हल हो गई - 'समस्या में आसान होना' –

+1

एटम या विजुअल स्टूडियो जैसी टूलिंग का उपयोग करें जो इस गलती को इंगित करता है! –

5

मेरे पास एक ही समस्या थी और यह पता लगाने में सक्षम था कि मेरे आयात में मिश्रित था। मुझे एहसास है कि गुस्तावो समस्या को पुन: उत्पन्न नहीं कर सके क्योंकि आपने शामिल नहीं किया था कि आपके आयात क्या दिखते थे और उन्होंने उन्हें सही तरीके से भर दिया।

बस संक्षिप्त व्याख्या करने के लिए कैसे मेरी समस्या समान था:

इस -

err := db.Find(bson.M{"_id": bson.ObjectIdHex(userId)}).One(&user) 

मेरे लिए काम नहीं कर रहा था, यह डेटाबेस से जानकारी नहीं मिलेगा और इस-

वापसी होगी
{ObjectIdHex("") } 

मैं यह कैसे तय ... हमने पाया है कि

server.go पृष्ठ में, ओ आयात का यह था।

"gopkg.in/mgo.v2” 

यह होना चाहिए था।

"labix.org/v2/mgo” 

वास्तविक बग gopkg.in/mgo.v2 का उपयोग नहीं है। यह है कि कोड labix.org/ और gopkg.in आयात मॉड्यूल मिश्रण कर रहा था।

तो यह चाल इसका उपयोग करना है।

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

या यह।

"labix.org/v2/mgo" 
"labix.org/v2/mgo/bson” 

लेकिन उन्हें मिश्रण न करें। शीर्ष एक पसंदीदा व्यक्ति है, जैसा कि नवीनतम दस्तावेज़ उपयोग करते हैं।

उम्मीद है कि इससे मदद मिलती है।

 संबंधित मुद्दे