2016-07-23 27 views
0

首先,我非常新的去:)使用氧化鎂總迭代器數據UPSERT無解編

我試圖做使用去和MgO司機蒙戈合計+ UPSERT。

我的代碼看起來是這樣的:

pipe := c.Pipe([]bson.M{{"$match": bson.M{"name":"John"}}}) 
iter := pipe.Iter() 
resp := []bson.M{} 

for iter.Next(&resp) { 
    // 
    // read "value.sha1" from each response 
    // do a: 
    // otherCollection.Upsert(bson.M{"value.sha1": mySha1}, resp) 
    // 
} 

從集合集合的響應可以有很多格式的,所以我不能爲它定義一個結構。

我只需要從響應中的一個字段中獲得一個sha1,並根據sha1條件更新另一個收到的響應。

任何人都可以指向正確的方向嗎?

+0

在這種情況下'接口'是要走的路。 –

+0

你能給我更多的細節嗎? – Petru

回答

1

也許我誤解了你,但你可以簡單地訪問返回的文檔作爲map。類似這樣的:

pipe := c.Pipe([]bson.M{}) 
iter := pipe.Iter() 
resp := bson.M{} // not array as you are using iterator which returns single document 

for iter.Next(&resp) { 
    otherCollection.Upsert(bson.M{"value.sha1": result["value"].(bson.M)["sha1"]}, resp) 
} 
+0

這可能是。我仍然得到'無效的操作:result [「value」] [「sha1」](type interface {}不支持索引)' – Petru

+0

@Petru可以發佈'fmt.Printf(「%+ v \ n」 ,resp)'?看起來你的'resp'不是'bson.M',這很奇怪。 –

+0

'map [extracted_files: file_info:map [file_size:235933 file_type_description:Win32 ...'我的錯誤在編譯時間 – Petru