6

我从 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

我得到这个错误

找不到合适的服务器(serverSelectionTryOnce设置):[连接关闭调用 ismaster on 'xxxx-shard-00-00-uggj0.mongodb.net:27017'

我与 Mongodb Compass 冷连接没有问题。

我的 Atlas Ip 白名单已打开 (0.0.0.0/0)。

我错过了什么吗?

4

4 回答 4

22

在 Laravel 中,如下所示使用 config/database.php 中的 'dsn' 键来提及完整的集群 url。

'mongodb_conn' => [
        'driver' => 'mongodb',
        'dsn'=>'mongodb://username:password@host1,host2/database?ssl=true&replicaSet=replicaSet&authSource=admin',
        'database' => 'my_data',
    ]
于 2017-07-24T17:49:03.057 回答
3

以下对我有用,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

于 2021-02-16T07:33:53.917 回答
1

默认情况下,在组装连接字符串时,Jensegers\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 /。

于 2021-02-19T21:46:05.383 回答
0
 '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

于 2020-10-14T13:43:19.767 回答