Генерация 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"`
}

Оставить комментарий

© 2010 - 2024 Ядоблог. Ничего не защищено.
Powered by Лаборатория Яда. Написать Яду