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)
}
}
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: