У меня есть такой документ
{
"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, чтобы получать обновления сразу после внесения изменений?