Сбой обновления документа mongo

# #mongodb #go

Вопрос:

Я пытаюсь обновить документ, созданный до выполнения задачи, а затем обновленный через несколько миллисекунд после завершения задачи. Проблема в том, что эффекты обновлений не сохраняются, и мне интересно, связано ли это с очень небольшим временным лагом (я не эксперт по DB/mongo) или что-то не так в моем коде. Вот код для обновления:

 func (r *taskRepoConnection) Update(task *entity.Task) (*entity.Task, error) {
    ctx, cancel := context.WithTimeout(context.Background(), r.connection.Timeout)
    defer cancel()

    collection := r.connection.Client.Database(r.connection.Database).Collection(userCollectionName)

    filter := bson.D{{"_id", task.ID}}
    update := bson.D{
        {"$set", bson.M{
            "status":                       task.Status,
            "processing_time":              task.ProcessingTime,
        }}}
    opts := options.Update().SetUpsert(true)

    result, err := collection.UpdateOne(ctx, filter, update, opts)

    // The code below is just meant to see the output
    if err != nil {
        fmt.Println("UpdateOne() result ERROR:", err)
        os.Exit(1)
    } else {
        fmt.Println("UpdateOne() result:", result)
        fmt.Println("UpdateOne() result TYPE:", reflect.TypeOf(result))
        fmt.Println("UpdateOne() result MatchedCount:", result.MatchedCount)
        fmt.Println("UpdateOne() result ModifiedCount:", result.ModifiedCount)
        fmt.Println("UpdateOne() result UpsertedCount:", result.UpsertedCount)
        fmt.Println("UpdateOne() result UpsertedID:", result.UpsertedID)
    }

    if err != nil {
        return nil, errors.Wrap(err, "repository.Task.Update")
    }

    return task, nil
}
 

Вывод:

 UpdateOne() result: amp;{0 0 1 ObjectID("6169aeabd76ef4eb1f9c5290")}
UpdateOne() result TYPE: *mongo.UpdateResult
UpdateOne() result MatchedCount: 0
UpdateOne() result ModifiedCount: 0
UpdateOne() result UpsertedCount: 1
UpdateOne() result UpsertedID: ObjectID("6169aeabd76ef4eb1f9c5290")
 

Комментарии:

1. Что это за тип task.ID ?

2. Это тип объекта

3. Попробуйте установить параметры команды writeConcern update в соответствии с количеством кластеров MongoDB, которые у вас есть или majority .

4. @Minathe и task.ID имеет ли значение правильное значение? Есть ли запись в базе данных с таким идентификатором? Была ли вставка перед успешным завершением обновления? Вы пробовали добавить время? Спать перед обновлением только для того, чтобы подтвердить, действительно ли это короткий промежуток времени между двумя операциями? На моей машине, если я сделаю это , я получу результат, который вы видите в комментариях к этому фрагменту.