Go MongoDB драйвер игнорирует обновление данных - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть такой документ

{
    "name": "nnn",
    "age": 21,
    "status": false
}

Я хочу получить status значение:

    client, err := mongo.NewClient(options.Client().ApplyURI(DbURI))
    if err != nil {
        return nil, err
    }

    err = client.Connect(ctx)
    if err != nil {
        return nil, err
    }

    err = client.Ping(ctx, nil)
    if err != nil {
        return nil, err
    }

    database := client.Database(DbName)
    if database == nil {
        return nil, err
    }

    collection := database.Collection(CollectionName)
    if collection == nil {
        return false, err
    }

    pipeline := []bson.M{
        {"$match": bson.M{
            "name": "nnnn",
        }},
        {"$project": bson.M{
            "_id":    0,
            "status": 1,
        }},
    }

    opts := options.Aggregate()
    cursor, err := collection.Aggregate(ctx, pipeline, opts)
    if err != nil {
        return false, err
    }

    var res []struct {
        Status bool   `bson:"status"`
    }

    if err := cursor.All(ctx, &res); err != nil {
        return false, err
    }

    return res[0].Status, nil
}

Если я изменю значение поля status в MongoDB Compass изапустить этот код, я получаю старое значение. Если я получаю значение в оболочке Монго, я получаю правильное значение

db.users.aggregate([{
    $match: {
        "name": "nnn"
    }
}, {
    $project: {
        _id: 0,
        status: 1
    }
}]).pretty()

Если я добавляю поле к res или удаляю его, я получаю правильное значение в go

    var res []struct {
        Status bool   `bson:"status"`
        Age int `bson:"age"`
    }

Почему этослучиться? Как мне управлять соединением с mongo, чтобы получать обновления сразу после внесения изменений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...