2013-08-07 27 views
2
從集合檢索文檔

我的目標我有收集:通過ID

type Room struct { 
    Id bson.ObjectId   `json:"Id"     bson:"_id"` 
    Name string     `json:"Name"    bson:"name"` 
} 

插入到集合:

room = &Room{Id: bson.NewObjectId(), Name: "test"} 
RoomCollection.Insert(room) 

從集合檢索(任意):

roomX := &Room{} 
if err := RoomCollection.Find(bson.M{}).One(roomX); err != nil { 
    panic(err) 
} 
fmt.Printf("RoomX %s:\n%+v\n\n", roomX.Id, roomX) 

該輸出:

RoomX ObjectIdHex("52024f457a7ea6334d000001"): 
&{Id:ObjectIdHex("52024f457a7ea6334d000001") Name:test} 

檢索從集合(按id):

roomZ := &Room{} 
if err := RoomCollection.Find(bson.M{"_id": room.Id}).One(roomZ); err != nil { 
    panic(err) // throws "not found" 
} 

,這將引發 「找不到」,我想不通爲什麼。

+1

您的代碼看起來正確。我只是想知道空白是否是分離json和bson字段標記的正確方法?使用MongoDB控制檯進行檢查,並確保Room.Id與'_id'存儲在一起,而不是'id'作爲字段名稱。 – ANisus

+0

通常這是一個逗號 – thwd

+1

@tomwilde:是的,但在反映包中說它是'可選空間分隔'。 Ondrej可以嘗試使用單個空間而不是多個空間。 – ANisus

回答

2

根據reflect包,字段的不同鍵值標記應該用空格分隔。

按照慣例,標記字符串是可選空格分隔鍵:「值」對的串聯。每個鍵都是由空格(U + 0020''),引號(U + 0022'「')和冒號(U + 003A':')以外的非控制字符組成的非空字符串。使用U + 0022'「'字符和Go字符串文字語法。

mgo包無法讀取標籤並存儲的Id值作爲id代替_id