es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

clúster de MongoDB Atlas inserción en Golang estructura de datos de tipo slice de interface contexto cancelado, topología actual.

Cuando inserto un conjunto de documentos en una colección de MongoDB Atlas, obtengo el siguiente mensaje de error:

2021/12/23 09:37:03 error de selección de servidor: contexto cancelado, topología actual: {Tipo: ReplicaSetNoPrimary, Servidores: [{ Dirección: cluster-attitude-shard-00-00.o7pjk.mongodb.net:27017, Tipo: Desconocido }, { Dirección: cluster-attitude-shard-00-01.o7pjk.mongodb.net:27017, Tipo: Desconocido }, { Dirección: cluster-attitude-shard-00-02.o7pjk.mongodb.net:27017, Tipo: Desconocido }, ] }

Utilizo el siguiente código:

interfaz_slice := ToInterfaceSlice(students)

err := coleccion.InsertMany(ctx, interfaz_slice)

La función “ToInterfaceSlice” recibe una lista de structs y devuelve una lista de interfaces.

No entiendo dónde estoy cometiendo un error.

Gracias de antemano.

Nueva parte de la pregunta:

Fragmento de archivo “main.go”:

func main() {

    var students []data.TypeStudent

    absPath, _ := filepath.Abs("data/students.csv")

    students = data.LeerFichero(absPath)

    data.ConectaBD()

    data.InsertaColleccionEstudiantes(students)
}

Fragmento de archivo “students.go”:

type TypeStudent struct {
    FirstName string `bson:"first_name" json:"first_name"`
    LastName  string `bson:"last_name" json:"last_name"`
    Class     string `bson:"class" json:"class"`
}

func ToInterfaceSlice(lista []TypeStudent) []interface{} {
    iface := make([]interface{}, len(lista))
    for i := range lista {
        iface[i] = lista[i]
    }
    return iface
}

Fragmento de archivo “basedatos.go”:

func ConectaBD() {

    cliente_local, err := mongo.NewClient(options.Client().ApplyURI(cadena_conexion))
    if err != nil {
        log.Fatal(err)
    }
    ctx, cancelar = context.WithTimeout(context.Background(), 10*time.Second)
    err = cliente_local.Connect(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer cancelar()

    mongo_cliente = cliente_local.Database("attitude")

    log.Println("[+] Conectado a MongoDB Atlas")
}

func InsertaColleccionEstudiantes(students []TypeStudent) {

    coleccion = mongo_cliente.Collection("students")

    interfaz_slice := ToInterfaceSlice(students)

    log.Println("[+] Se inserta una lista de interfaces directamente en MONGODB")

    _, err := coleccion.InsertMany(ctx, interfaz_slice)

    if err != nil {
        log.Fatal(err)
    }
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “error de selección del servidor: contexto cancelado” sugiere que hay un problema con el clúster de MongoDB Atlas o con la conexión de red entre su código y el clúster. También podría indicar un problema con el objeto de contexto que se está utilizando en el código para comunicarse con el clúster.

    Una posible causa del error podría ser que el objeto de contexto se cancele antes de que se complete la operación de inserción. El objeto de contexto tiene un tiempo de espera de 10 segundos, lo que significa que si la operación tarda más de 10 segundos, se cancela el contexto y se termina la operación. Para evitar esto, es posible que desee aumentar el valor de tiempo de espera o eliminar por completo el tiempo de espera.

    Otra posible causa del error podría ser que el clúster de MongoDB Atlas no sea alcanzable o que esté experimentando algún otro problema. Puede comprobar el estado del clúster utilizando el panel de control de MongoDB Atlas o poniéndose en contacto con el soporte técnico.

    Por último, podría haber un problema con los datos que se están insertando. Asegúrese de que los datos estén en el formato correcto y que coincidan con el esquema de la colección.

    Sin más información sobre su código y el mensaje de error específico, es difícil proporcionar una respuesta más detallada. Sin embargo, puede intentar lo siguiente:

    • Verificar el panel de control de MongoDB Atlas en busca de alertas de estado o problemas con el clúster.
    • Aumentar el valor de tiempo de espera del contexto.
    • Verificar que los datos que se están insertando coincidan con el esquema de la colección.
    • Depurar el código para identificar cualquier otro problema que pueda estar causando el error.

Comments are closed.