将 laravel jenssegers 连接到 mongodb atlas 集群
Connect laravel jenssegers to mongodb atlas cluster
我从 Mongodb atlas 开始,我试图将我的 laravel/jenssegers 项目连接到我配置 conf/database
的集群
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST'),
'port' => env('DB_PORT', '27017'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'options' => [
'database' => 'admin' // sets the authentication database required by mongo 3
]
],
还有我的 .env 文件
DB_HOST="xxxx-shard-00-00-uggj0.mongodb.net"
DB_PORT=27017
DB_DATABASE=xxx
DB_USERNAME=xxx
DB_PASSWORD=xxx
我收到这个错误
No suitable servers found (serverSelectionTryOnce
set): [connection closed calling ismaster on 'xxxx-shard-00-00-uggj0.mongodb.net:27017'
我冷连接 Mongodb Compass 没问题。
我的图集IP 白名单 已打开 (0.0.0.0/0)。
我是不是漏掉了什么?
在Laravel中,使用'dsn'键在config/database.php如下图提到完整的簇url.
'mongodb_conn' => [
'driver' => 'mongodb',
'dsn'=>'mongodb://username:password@host1,host2/database?ssl=true&replicaSet=replicaSet&authSource=admin',
'database' => 'my_data',
]
'mongodb' => [
'driver' => 'mongodb',
'host' => [
'abc-00-00.mongodb.net',
'abc-00-01.mongodb.net',
'abc-00-02.mongodb.net'
],
'port' => env('MONGO_DB_PORT', 27017),
'database' => env('MONGO_DB_DATABASE'),
'username' => env('MONGO_DB_USERNAME'),
'password' => env('MONGO_DB_PASSWORD'),
'options' => [
'ssl' => 'true',
'replicaSet' => 'abc-0',
'authSource' => 'admin',
'retryWrites' => 'true',
'w' => 'majority'
]
],
这适用于 laravel 6 和 MongoDB 1.2 或更高版本 MongoDB atlas
以下对我有用,MongoDB Atlas 和 Laravel 5.7:
更新 config/database.php
:
'mongodb' => [
'driver' => 'mongodb',
'dsn' => 'mongodb+srv://<username>:<password>@cluster0.kxxi7.mongodb.net/mydatabase?retryWrites=true&w=majority',
'database' => 'mydatabase',
],
在 dsn
处设置连接字符串,在 database
处设置数据库名称。
默认情况下,在组装连接字符串时,Jenssegers\Mongodb 包会组装一个以 mongodb:// 开头的 DSN。为了连接到 mongoDB atlas 实例,DSN 需要以 mongodb+srv://.
开头
处理此问题的最简单、最灵活的方法是将以下条目添加到您的 .env 中:
MONGO_DB_BASE_URI=mongodb+srv://
然后,在您的 database.php 中,您的 mongodb 条目应如下所示:
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGO_DB_HOST', 'localhost'),
'port' => env('MONGO_DB_PORT', 27017),
'database' => env('MONGO_DB_DATABASE'),
'username' => env('MONGO_DB_USERNAME'),
'password' => env('MONGO_DB_PASSWORD'),
'options' => [],
'dsn' => env('MONGO_DB_BASE_URI','mongodb://').env('MONGO_DB_HOST', 'localhost')
],
这让您可以控制是否连接到本地实例 - 在这种情况下,您可以使用 mongodb:// 的 DSN,或者像 Atlas 这样的云实例 - 在这种情况下,您使用 mongodb+srv://.
的 DSN
我从 Mongodb atlas 开始,我试图将我的 laravel/jenssegers 项目连接到我配置 conf/database
的集群'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST'),
'port' => env('DB_PORT', '27017'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'options' => [
'database' => 'admin' // sets the authentication database required by mongo 3
]
],
还有我的 .env 文件
DB_HOST="xxxx-shard-00-00-uggj0.mongodb.net"
DB_PORT=27017
DB_DATABASE=xxx
DB_USERNAME=xxx
DB_PASSWORD=xxx
我收到这个错误
No suitable servers found (
serverSelectionTryOnce
set): [connection closed calling ismaster on 'xxxx-shard-00-00-uggj0.mongodb.net:27017'
我冷连接 Mongodb Compass 没问题。
我的图集IP 白名单 已打开 (0.0.0.0/0)。
我是不是漏掉了什么?
在Laravel中,使用'dsn'键在config/database.php如下图提到完整的簇url.
'mongodb_conn' => [
'driver' => 'mongodb',
'dsn'=>'mongodb://username:password@host1,host2/database?ssl=true&replicaSet=replicaSet&authSource=admin',
'database' => 'my_data',
]
'mongodb' => [
'driver' => 'mongodb',
'host' => [
'abc-00-00.mongodb.net',
'abc-00-01.mongodb.net',
'abc-00-02.mongodb.net'
],
'port' => env('MONGO_DB_PORT', 27017),
'database' => env('MONGO_DB_DATABASE'),
'username' => env('MONGO_DB_USERNAME'),
'password' => env('MONGO_DB_PASSWORD'),
'options' => [
'ssl' => 'true',
'replicaSet' => 'abc-0',
'authSource' => 'admin',
'retryWrites' => 'true',
'w' => 'majority'
]
],
这适用于 laravel 6 和 MongoDB 1.2 或更高版本 MongoDB atlas
以下对我有用,MongoDB Atlas 和 Laravel 5.7:
更新 config/database.php
:
'mongodb' => [
'driver' => 'mongodb',
'dsn' => 'mongodb+srv://<username>:<password>@cluster0.kxxi7.mongodb.net/mydatabase?retryWrites=true&w=majority',
'database' => 'mydatabase',
],
在 dsn
处设置连接字符串,在 database
处设置数据库名称。
默认情况下,在组装连接字符串时,Jenssegers\Mongodb 包会组装一个以 mongodb:// 开头的 DSN。为了连接到 mongoDB atlas 实例,DSN 需要以 mongodb+srv://.
开头处理此问题的最简单、最灵活的方法是将以下条目添加到您的 .env 中:
MONGO_DB_BASE_URI=mongodb+srv://
然后,在您的 database.php 中,您的 mongodb 条目应如下所示:
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGO_DB_HOST', 'localhost'),
'port' => env('MONGO_DB_PORT', 27017),
'database' => env('MONGO_DB_DATABASE'),
'username' => env('MONGO_DB_USERNAME'),
'password' => env('MONGO_DB_PASSWORD'),
'options' => [],
'dsn' => env('MONGO_DB_BASE_URI','mongodb://').env('MONGO_DB_HOST', 'localhost')
],
这让您可以控制是否连接到本地实例 - 在这种情况下,您可以使用 mongodb:// 的 DSN,或者像 Atlas 这样的云实例 - 在这种情况下,您使用 mongodb+srv://.
的 DSN