Как мне справиться с произвольным хешем, возвращаемым из mongo в go (используя mgo)?

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

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

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


person fields    schedule 17.01.2014    source источник


Ответы (1)


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

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.

person Gustavo Niemeyer    schedule 17.01.2014