Saya ingin menghubungkan aplikasi laravel 5.7 saya (saya menggunakan jenssegers/mongodb versi 3.4) dengan mongodb di atlas, saya mencoba di localhost (saya menginstal ekstensi mongo) dan semuanya baik-baik saja tetapi dengan atlas saya mendapat pesan kesalahan:

Gagal mengurai URI MongoDB: 'mongodb://root%3Acluster0.xxx.mongodb.net%3A27017%2Fhddatabase%3FretryWrites%3Dtrue%26w%3Dmajority'. String host tidak valid di URI.

File env saya:

DB_CONNECTION=mongodb
DB_DSN="mongodb://root:password@cluster0.xxx.mongodb.net:27017/hddatabase?retryWrites=true&w=majority"
DB_DATABASE=hddatabase

Konfigurasi basis data saya:

'mongodb' => [
    'driver'   => 'mongodb',
    'dsn' => env('DB_DSN'),
    'database' => env('DB_DATABASE'),
],
0
SAFSAF 11 Januari 2021, 14:36

3 jawaban

Jawaban Terbaik

Bahkan dengan format 'srv' saya mendapatkan kesalahan yang sama, Masalahnya adalah saya menggunakan jenssegers/mongodb versi 3.4.0, saya memutakhirkan ke versi 3.4.6 dan menggunakan format 'srv' dan masalahnya adalah terpecahkan sekarang!

0
SAFSAF 15 Januari 2021, 12:58

TL;DR: Urlnya salah. Bagian "+srv" tidak ada. Silakan salin url dari Atlas Connection Wizard:

enter image description here

Anda dapat membuka koneksi dari Tampilan Cluster:

enter image description here

Rincian

Atlas menyediakan cluster set replika dari 3 instance mongo db secara default. Basis data lokal Anda berdiri sendiri.

Ada 2 format untuk terhubung ke mongodb:

  • mongodb:// adalah warisan yang mengharuskan semua anggota kumpulan replika hadir secara eksplisit di url. misalnya: mongodb://<username>:<password>@cluster0-shard-00-00.xxx.mongodb.net:27017,cluster0-shard-00-01.xxx.mongodb.net:27017,cluster0-shard-00-02.xxx.mongodb.net:27017/<dbname>?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true&w=majority
  • mongodb+srv:// adalah format "srv" yang memungkinkan driver mengambil konfigurasi set replika dari mongodb itu sendiri, jadi urlnya jauh lebih sederhana: mongodb+srv://<username>:<password>@cluster0.xxx.mongodb.net/<dbname>?retryWrites=true&w=majority

Anda menggunakan format yang lebih baru dan skema lama sehingga pengemudi mengeluh.

Sebagai catatan, disarankan untuk menggunakan opsi konfigurasi username dan password seperti yang didokumentasikan dalam https://github.com/jenssegers/laravel-mongodb#configuration daripada meneruskannya di url. Format URL memerlukan karakter khusus seperti @, /, dll dalam kata sandi untuk diloloskan, yang tidak perlu memperumit manajemen kredensial.

1
Alex Blex 15 Januari 2021, 10:45

Coba dengan DNS ini mungkin:

mongodb://root:password@cluster0.xxx.mongodb.net:27017

0
Tahar Chibane 14 Januari 2021, 09:29