2016-07-23 6 views
0

Прежде всего, я очень новые идти :)использовать Ие агрегатный итератор данные в upsert без демаршалинга

Я пытаюсь сделать агрегат + 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"] (тип interface {} не поддерживает индексирование) ' – Petru

+0

@Petru вы можете публиковать результат' fmt.Printf ("% + v \ n" , resp) '? Похоже, ваш 'resp' не' bson.M', и это странно. –

+0

'map [extract_files: file_info: map [file_size: 235933 file_type_description: Win32 ...' моя ошибка во время компиляции – Petru

 Смежные вопросы

  • Нет связанных вопросов^_^