Обработка нескольких результатов поиска - PullRequest
0 голосов
/ 24 февраля 2020

Я храню пользователей и отношусь к ним как к центру вселенной в своем приложении, сейчас я пытаюсь представить концепцию организации, согласно которой пользователи могут быть членами многих организаций, и тогда будут принадлежать определенные настройки и т. Д. c в орг. Функция, которую я пытаюсь создать, заключается в поиске всех организаций, в которых можно найти идентификатор пользователя, а также владельца или одного из участников, и возвращает список организаций, чтобы затем отобразить детали на стороне клиента.

У меня возникла проблема, связанная с обработкой и преобразованием результатов из Mon go Find, а затем с тем, как обработать это и преобразовать в формат, который я могу безопасно вернуть в конце.

В настоящее время я не могу вернуться данные с ошибкой

не могут использовать & org (значение типа * [] * model.Org) в качестве значения * model.Org в операторе возврата

Org Модель

модель пакета

// Org is the structure of a org
type Org struct {
    ID          string   `json:"id" bson:"_id"`
    Name        string   `json:"name" bson:"name"`
    Owner       string   `json:"owner" bson:"owner"`
    Members     []string `json:"members" bson:"members"`
    Token       string   `json:"token" bson:"-"`
    VerifyToken string   `json:"verifyToken" bson:"verifyToken"`
}

Функция

// GetOrgByUserID returns a user by his id
func (db *DB) GetOrgByUserID(id string) (*model.Org, error) {
    findOptions := options.Find()

    var org []*model.Org

    cur, err := db.collections.orgs.Find(context.TODO(), bson.D{{"owner", id}}, findOptions)
    if err != nil {
        return nil, err
    }
    // Iterate through the cursor
    for cur.Next(context.TODO()) {
        var elem model.Org
        err := cur.Decode(&elem)
        if err != nil {
            return nil, err
        }

        org = append(org, &elem)
    }

    if err := cur.Err(); err != nil {
        return nil, err
    }
    // Close the cursor once finished
    cur.Close(context.TODO())

    return &org, nil
}

1 Ответ

1 голос
/ 24 февраля 2020

Исправьте, объявив возвращаемое значение в качестве среза. Кроме того, упростите код, используя метод курсора Все :

func (db *DB) GetOrgByUserID(id string) ([]*model.Org, error) {
    findOptions := options.Find()
    cur, err := db.collections.orgs.Find(context.TODO(), bson.D{{"owner", id}}, findOptions)
    if err != nil {
        return nil, err
    }
    defer cur.Close(ctx.TODO())
    var org []*model.Org
    err = cur.All(ctx.TODO(), &org)
    return org, nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...