Генерация golang структур по содержимому mongodb
30 марта, 2016
Наткнулся на замечательную библиотечку https://github.com/facebookgo/mongoschema
Генерирует по содержимому коллекции golang структуры, сразу с bson тегами, чтобы использовать с mgo
Лёгкий пример, с плоскими данными:
◼ ▶ $GOPATH/bin/mongoschema -url=localhost -db=test -collection=users -struct=User -package=main
package main
type User struct {
Google string `bson:"google,omitempty"`
ID bson.ObjectId `bson:"_id,omitempty"`
Email string `bson:"email,omitempty"`
DisplayName string `bson:"displayName,omitempty"`
Picture string `bson:"picture,omitempty"`
}
Для данных с разной структурой будет выдана невалидная структура, в которой нужно самостоятельно выбрать проблемные участки. Работает только с флагом -raw
◼ ▶ $GOPATH/bin/mongoschema -url=localhost -db=test -collection=coupons -struct=Coupon -package=main -raw
package main
import (
"gopkg.in/mgo.v2/bson"
"time"
)
type Coupon struct {
SphinxID int64 `bson:"sphinx_id,omitempty"`
ID bson.ObjectId `bson:"_id,omitempty"`
PageID bson.ObjectId `bson:"page_id,omitempty"`
SiteID bson.ObjectId `bson:"site_id,omitempty"`
Publicated bool `bson:"publicated,omitempty"`
DateCreation time.Time `bson:"date_creation,omitempty"`
PublicatedTime time.Time `bson:"publicated_time,omitempty"`
DateModification time.Time `bson:"date_modification,omitempty"`
Item struct {
Bonus string `bson:"bonus,omitempty"`
Dates interface{} /* []interface{} /* */, struct {
Beginsell time.Time `bson:"beginsell,omitempty"`
Endsell time.Time `bson:"endsell,omitempty"`
Endvalid time.Time `bson:"endvalid,omitempty"`
Beginvalid time.Time `bson:"beginvalid,omitempty"`
}, struct {
Endsell time.Time `bson:"endsell,omitempty"`
}, struct {
Beginsell time.Time `bson:"beginsell,omitempty"`
Endsell time.Time `bson:"endsell,omitempty"`
Endvalid time.Time `bson:"endvalid,omitempty"`
}, struct {
Beginsell time.Time `bson:"beginsell,omitempty"`
Endsell time.Time `bson:"endsell,omitempty"`
}, struct {
Endsell time.Time `bson:"endsell,omitempty"`
Endvalid time.Time `bson:"endvalid,omitempty"`
}, struct {
Beginsell time.Time `bson:"beginsell,omitempty"`
Endsell time.Time `bson:"endsell,omitempty"`
Beginvalid time.Time `bson:"beginvalid,omitempty"`
}, struct {
Endsell time.Time `bson:"endsell,omitempty"`
Endvalid time.Time `bson:"endvalid,omitempty"`
Beginvalid time.Time `bson:"beginvalid,omitempty"`
}, struct {
Endvalid time.Time `bson:"endvalid,omitempty"`
Beginvalid time.Time `bson:"beginvalid,omitempty"`
}, struct {
Beginsell time.Time `bson:"beginsell,omitempty"`
Beginvalid time.Time `bson:"beginvalid,omitempty"`
} */ `bson:"dates,omitempty"`
Tags interface{} /* []string, [][]string */ `bson:"tags,omitempty"`
Description interface{} /* []string, []interface{} /* */, string, [][]string, []struct {
P string `bson:"p,omitempty"`
} */ `bson:"description,omitempty"`
Price struct {
Currency string `bson:"currency,omitempty"`
Coupon interface{} /* string, int64 */ `bson:"coupon,omitempty"`
Economy string `bson:"economy,omitempty"`
Sold int64 `bson:"sold,omitempty"`
DiscountPrice int64 `bson:"discount_price,omitempty"`
Discont interface{} /* string, int64 */ `bson:"discont,omitempty"`
Full interface{} /* string, int64 */ `bson:"full,omitempty"`
} `bson:"price,omitempty"`
Location string `bson:"location,omitempty"`
URL string `bson:"url,omitempty"`
ID string `bson:"id,omitempty"`
Supplier struct {
URL string `bson:"url,omitempty"`
Addresses []struct {
Coordinates string `bson:"coordinates,omitempty"`
Name string `bson:"name,omitempty"`
} `bson:"addresses,omitempty"`
Tel string `bson:"tel,omitempty"`
Name string `bson:"name,omitempty"`
} `bson:"supplier,omitempty"`
IsClosed bool `bson:"is_closed,omitempty"`
Title string `bson:"title,omitempty"`
Type string `bson:"type,omitempty"`
Images interface{} /* []interface{} /* struct {
URL string `bson:"url,omitempty"`
CdnFilename string `bson:"cdn_filename,omitempty"`
} */, []interface{} /* */, []struct {
URL string `bson:"url,omitempty"`
CdnFilename string `bson:"cdn_filename,omitempty"`
}, []struct {
URL string `bson:"url,omitempty"`
CdnFilename bool `bson:"cdn_filename,omitempty"`
}, []struct {
URL string `bson:"url,omitempty"`
CdnFilename interface{} /* string, bool */ `bson:"cdn_filename,omitempty"`
}, []struct {
URL string `bson:"url,omitempty"`
CdnFilename interface{} /* bool, string */ `bson:"cdn_filename,omitempty"`
}, []struct {
URL string `bson:"url,omitempty"`
} */ `bson:"images,omitempty"`
CouponType string `bson:"coupon_type,omitempty"`
} `bson:"item,omitempty"`
}



IAD