2017-01-30 14 views
2

Скажем, у меня есть UserModel так:Вложенные документы в модели структуры

type (
    OrderModel struct { 
     ID bson.ObjectId `json:"id" bson:"_id"` 
     ... 
    } 

    UserModel struct { 
     ... 
     // What do I store here? Is this an array of strings? An array of bson.ObjectID? Or an Array of OrderModel? 
     Orders []string  `json:"orders" bson:"orders"` 
     Orders []bson.ObjectId `json:"orders" bson:"orders"` 
     Orders []OrderModel `json:"orders" bson:"orders"` 
     ... 
    } 
) 

func (user *UserModel) PopulateOrders() { 
    orders := []OrderModel{} 

    // Query orders and assign to variable orders to then be assigned the the user Object 
    // {magic query here} 

    user.Orders = orders 
} 

В MongoDB, массив ObjectID с будет храниться ссылаться на OrderModel документы. Позже у меня есть функция, которая будет заполнять документы Order, как описано выше: PopulateOrders.

Каков наилучший способ для вышеуказанного случая?

ответ

1

Я бы использовал 2 отдельных поля, один для фрагмента идентификаторов, и один для фрагмента лениво загружаемых объектов.

Опустить лениво загруженный предметный кусок от сохранения. Это может выглядеть следующим образом:

type UserModel struct { 
    // ... 
    OrderIDs []bson.ObjectId `json:"orderIDs" bson:"orderIDs"` 
    Orders []OrderModel `json:"orders" bson:"-"` 
    // ... 
} 

Обратите внимание, что я намеренно не исключает Orders из JSON сериализации, как это (может) быть полезным в представлении JSON.