2014-01-17 3 views
0

Все ссылки, которые я могу найти, строят структуру для хранения возвращаемых значений, предполагая, что каждая возвращенная запись имеет одну и ту же схему. Если они действительно являются документами и не имеют согласованной схемы, отличной от, возможно, нескольких запрашиваемых согласованных атрибутов метаданных, как я могу обработать это возвращаемое значение?Как я могу справиться с произвольным хешем, возвращенным из mongo в go (используя mgo)?

например: https://groups.google.com/forum/#!msg/mgo-users/KirqfCSlKFc/t2l3l4yxFRwJ предполагает, что у вас есть массив временных меток. Что, если это массив, где некоторые значения являются метками времени, а некоторые - строками?

В рубине я бы просто обработал всю возвращенную запись как произвольный хэш и обработал ее ключом по ключу. Что я могу сделать с этим?

ответ

2

Вы можете использовать общую карту, например:

var result map[string]interface{} 
err := collection.Find(query).One(&result) 

Вы найдете человек, использующие bson.M, который также является карта с тем же базовым типом. Тем не менее ничего особенного в bson.M. Это просто краткое и удобное имя для карты. Вы можете создать свое собственное удобное имя или использовать обычную карту, как в приведенном выше примере.

Другой способ доступа к документам без определенной схемы использует bson.D вместо указанного выше типа карты. bson.D наиболее полезен, когда порядок элементов в документе релевантен, или если вы хотите немного уменьшить накладные расходы (карты немного дороже обрабатывать из-за их характера). Тип bson.D - это фрагмент значений структуры с парами ключ/значение. В отличие от bson.M, bson.D является специальным и обрабатывается внутри пакета mgo/bson.

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

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