Отношения в мго

Я написал простую программу с golang и mgo. Мой вопрос в том, как правильно отношения в mgo.

1-й подход:

type User struct {
    Id       bson.ObjectId   `json:"_id,omitempty" bson:"_id,omitempty"`
    Username string          `json:"username" bson:"username"`
    Email    string          `json:"email" bson:"email"`
    Password string          `json:"password" bson:"password"`
    Friends  []User          `json:"friends" bson:"friends"`
}

«Друзья» — это часть пользователей. Я могу $push указатель на пользователя, и он просто отлично работает. Дело в том, что я хочу только сохранить ссылку на пользователя, а не вкладывать его:

2-й подход:

type User struct {
    Id       bson.ObjectId   `json:"_id,omitempty" bson:"_id,omitempty"`
    Username string          `json:"username" bson:"username"`
    Email    string          `json:"email" bson:"email"`
    Password string          `json:"password" bson:"password"`
    Friends  []bson.ObjectId `json:"friends" bson:"friends"`
}

Это дает мне результат, который я хочу, но теперь из структуры не видно, на какие вложенные структуры ссылаются. Предоставляет ли mgo какой-то механизм для решения этой проблемы?


person Michel    schedule 26.12.2014    source источник


Ответы (1)


mgo - это библиотека драйверов БД, а не ORM. Что бы я сделал, так это иметь массив идентификаторов, как во втором примере (неэкспортированный, с строчными буквами), и иметь метод Friends(), который запрашивает БД по этим идентификаторам и возвращает []Пользователь

person Gal Ben-Haim    schedule 26.12.2014