Solución:
Tenía el mismo problema cuando intentaba conectarlo a una única instancia de mongo independiente, sin embargo, como está escrito en la documentación oficial, Mongo admite la función de transacción para un conjunto de réplicas. Entonces, intenté crear un conjunto de réplicas con todas las instancias en MongoDB 4.0.0, pude ejecutar con éxito el código. Entonces, inicie un conjunto de réplicas (3 miembros), luego intente ejecutar el código, el problema se resolverá.
NB: puede configurar un conjunto de réplicas en la misma máquina para las pruebas https://docs.mongodb.com/manual/tutorial/deploy-replica-set-for-testing/
El conjunto de réplicas es la solución para el problema con seguridad
Pero hacer réplicas de 3 nodos no es obligatorio.
Solucion 1 (para configuración independiente)
Para la instalación independiente de mongo, puede omitir la configuración del segundo o tercer nodo como se describe en la documentación oficial de mongo aquí
Y deberá establecer un replSetName en la configuración
replication:
oplogSizeMB: <int>
replSetName: <string>
enableMajorityReadConcern: <boolean>
y luego ejecute los detalles de los cuales están aquí
rs.initiate()
después de esto, la cadena de conexión sería la siguiente: –
mongodb://localhost:27017/<database_name>?replicaSet=<replSet_Name>
teclas de arriba que necesita reemplazar: –
nombre de la base de datos = nombre de la base de datos
replSet_Name = nombre del conjunto de réplicas que configuró en la configuración anterior
Solucion 2 (solo para requisitos basados en Docker)
Ejemplo de imagen de Docker con conjunto de réplicas de un solo nodo que actúa como nodo principal para el entorno de desarrollo es el siguiente: –
Yo había hospedado el imagen de la ventana acoplable en el concentrador de la ventana acoplable
docker pull krnbr/mongo:latest
Contenido del mismo Dockerfile están abajo: –
FROM mongo
RUN echo "rs.initiate({'_id':'rs0','members':[{'_id':0,'host':'127.0.0.1:27017'}]});" > /docker-entrypoint-initdb.d/replica-init.js
RUN cat /docker-entrypoint-initdb.d/replica-init.js
CMD [ "--bind_ip_all", "--replSet", "rs0" ]
Comando de ejecución de Docker (reemplácelo con el nombre de la imagen que creó usted mismo o use el compartido anterior, es decir, krnbr / mongo): –
sin volumen
docker run -d --name mongo -p 27017:27017 <Image Name> mongod --replSet rs0 --port 27017
con volumen
docker run -d --name mongo -p 27017:27017 -v ~/.mongodb:/data/db <Image Name> mongod --replSet rs0 --port 27017
para apoyar vinculación de cualquier ip
docker run -d --name mongo -p 27017:27017 -v ~/.mongodb:/data/db <Image Name> mongod --bind_ip_all --replSet rs0 --port 27017
Pudimos configurar en local como se muestra a continuación
-
En Linux, se incluye un archivo de configuración predeterminado /etc/mongod.conf cuando se usa un administrador de paquetes para instalar MongoDB.
-
En Windows, un valor predeterminado
El archivo de configuración /bin/mongod.cfg se incluye durante la instalación -
En macOS, se incluye un archivo de configuración predeterminado /usr/local/etc/mongod.conf cuando se instala desde el grifo Homebrew oficial de MongoDB.
Agregar la siguiente configuración
replication:
oplogSizeMB: 128
replSetName: "rs0"
enableMajorityReadConcern: true
reinicio del mongod del servicio sudo;
mongo;
rs.initiate({
_id: "rs0",
version: 1,
members: [
{ _id: 0, host : "localhost:27017" }
]
}
)
cheque para que la configuración esté habilitada
rs.conf()
podemos usar el URL de conexión como
mongodb://localhost/default?ssl=false&replicaSet=rs0&readPreference=primary
docs: config-options replicación de instancia única