- Стоит ли избегать импорта BSON?
Я не вижу причин для этого.MongoDB (через mgo
) и BSON идут рука об руку.Неважно, импортируете ли вы bson
или нет, bson
все равно будет использоваться под капотом (для сериализации / представления данных, отправляемых туда и обратно).
Могу ли я запросить все подходящие шаблоны без использования BSON или с указанием всего интерфейса?
Да, вы можете, если вы используете опцию omitempty
при указании "bson"
теги, например:
type Person struct {
Name string `bson:"name,omitempty"`
Phone string `bson:"phone,omitempty"`
}
Теперь, если вы выполните запрос, подобный следующему:
err = c.Find(Person{
Name: "Alice",
}).All(&result)
Тогда, когда значение фильтра будет маршализовано в BSON, оно будет содержать только "name"
поле, потому что Phone
является его нулевым значением, поэтому оно не будет маршализовано.
Конечно, использование omitempty
может быть не тем, что вы хотите, когда вы делаете вставку / обновление, поэтому использование одного типа для представленияи опроса людей может быть недостаточно.Как правило, вы должны пометить Person
как вы хотите представить свои данные, и вы должны использовать простые значения bson.M
для запроса, или создать другую структуру, которая моделирует, как вы хотите сделать запрос.
Нужно ли указывать ОБА ключи JSON и BSON, как в json:"name"
, или они взаимозаменяемы?
Они не являются взаимозаменяемыми, поэтому, если указать только теги json
, этоне используется (игнорируется) пакетом bson
, и аналогично, если вы укажете только теги bson
, пакет стандартной библиотеки encoding/json
не будет их использовать.Это два разных тега, используемые для двух разных целей, используемые двумя разными библиотеками (пакетами).
Вы можете или не можете указать оба.Если вы никогда не собираетесь сериализовать свои данные в JSON, вам не нужно указывать json
теги.