Как вернуть только выборку результатов из mongodb с драйвером golang mon go - PullRequest
0 голосов
/ 13 февраля 2020

Я хотел бы создать массив объектов, но только с отфильтрованным списком значений ключей.

    collection, err := driver.GetDBCollection()

    cur, err := collection.Find(context.Background(), bson.D{{}})
    if err != nil {
        log.Fatal(err)
    }

    var results []primitive.M
    for cur.Next(context.Background()) {
        var result bson.M
        e := cur.Decode(&result)
        if e != nil {
            log.Fatal(e)
        }
        results = append(results, result)

    }

Допустим, мои данные в mongodb выглядят так:

[
    {
        "_id": "123456",
        "username": "username1",
        "password": "hashedPassword",
        "token": "theToken"
    },
    {
        "_id": "123456",
        "username": "username2",
        "password": "hashedPassword",
        "token": "theToken"
    },
    {
        "_id": "123456",
        "username": "username3",
        "password": "hashedPassword",
        "token": "theToken"
    },
    {
        "_id": "123456",
        "username": "username4",
        "password": "hashedPassword",
        "token": "theToken"
    }
]

То, что у меня есть выше, вернет все это, но если я не хочу показывать некоторые поля, как бы я возвращал все результаты только из выбранных ключей, например, не включая пароль и токен, например:

[
    {
        "_id": "123456",
        "username": "username1"
    },
    {
        "_id": "123456",
        "username": "username2"
    },
    {
        "_id": "123456",
        "username": "username3"
    },
    {
        "_id": "123456",
        "username": "username4"
    }
]

исх .: https://godoc.org/go.mongodb.org/mongo-driver/mongo

1 Ответ

0 голосов
/ 13 февраля 2020

Для тех, кто не может найти это, вот решение, оно не очень хорошо задокументировано:

    opts := options.Find().SetProjection(bson.M{
        "_id":       1,
        "username":  1,
    })
    cur, err := collection.Find(context.Background(), bson.D{{}}, opts)
...