Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Решения
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Managed Service for MongoDB
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Информация об имеющихся кластерах
    • Создание кластера
    • Миграция базы данных в Yandex.Cloud
    • Подключение к базе данных
    • Остановка и запуск кластера
    • Изменение настроек кластера и базы данных
    • Обновление версии MongoDB
    • Управление базами данных
    • Управление хостами кластера
    • Управление пользователями БД
    • Управление резервными копиями
    • Управление шардами
    • Удаление кластера
  • Сценарии использования
    • Шардирование коллекций
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Классы хостов
      • Действующие классы хостов
      • Архив
        • До 1 июня 2020 года
      • Использование устаревших классов хостов
    • Сеть в Managed Service for MongoDB
    • Квоты и лимиты
    • Типы хранилища
    • Резервные копии
    • Репликация
    • Шардирование
    • Пользователи и роли
    • Поддерживаемые клиенты
  • Управление доступом
  • Правила тарификации
    • Действующие правила
    • Архив
      • До 1 января 2019 года
      • С 1 января до 1 марта 2019 года
      • С 1 марта 2019 года до 1 февраля 2020 года
  • Справочник API
    • Аутентификация в API
    • gRPC
      • Обзор
      • BackupService
      • ClusterService
      • DatabaseService
      • ResourcePresetService
      • UserService
      • OperationService
    • REST
      • Обзор
      • Backup
        • Обзор
        • get
        • list
      • Cluster
        • Обзор
        • addHosts
        • addShard
        • backup
        • create
        • delete
        • deleteHosts
        • deleteShard
        • enableSharding
        • get
        • getShard
        • list
        • listBackups
        • listHosts
        • listLogs
        • listOperations
        • listShards
        • move
        • restore
        • start
        • stop
        • update
      • Database
        • Обзор
        • create
        • delete
        • get
        • list
      • ResourcePreset
        • Обзор
        • get
        • list
      • User
        • Обзор
        • create
        • delete
        • get
        • grantPermission
        • list
        • revokePermission
        • update
      • Operation
        • Обзор
        • get
  • Вопросы и ответы
    • Общие вопросы
    • Вопросы о MongoDB
    • Все вопросы на одной странице
  1. Пошаговые инструкции
  2. Подключение к базе данных

Подключение к базе данных в кластере MongoDB

  • Ограничения на количество подключений
  • Настройка SSL-сертификата
  • Примеры строк подключения
    • Подключение к кластеру без шардирования
    • Подключение к кластеру с шардированием

К хостам кластера Managed Service for MongoDB можно подключиться:

  • Через интернет, если вы настроили публичный доступ для нужного хоста. К таким хостам подключиться можно только используя SSL-соединение.
  • С виртуальных машин Yandex.Cloud, расположенных в той же виртуальной сети. Если к хосту нет публичного доступа, для подключения с таких ВМ SSL-соединение использовать необязательно.

Для подключения к хостам кластеров Managed Service for MongoDB указывайте порт 27018. В случае шардированного кластера Managed Service for MongoDB указывайте порт 27017.

Примечание

Если публичный доступ в вашем кластере настроен только для некоторых хостов, автоматическая смена основной реплики может привести к тому, что вы не сможете подключиться к основной реплике из интернета.

Ограничения на количество подключений

Максимальное доступное количество одновременных подключений к отдельному хосту кластера Managed Service for MongoDB зависит от объема оперативной памяти этого хоста:

Объем оперативной памяти Максимальное количество подключений
2 ГБ 2048
4 ГБ 4096
8 ГБ 8192
16 ГБ и выше 16384

Доступный хосту объем оперативной памяти определяется классом этого хоста. Все доступные варианты перечислены в разделе Классы хостов.

Настройка SSL-сертификата

MongoDB-хосты с публичным доступом поддерживают только соединения с SSL-сертификатом. Подготовить сертификат можно так:

mkdir ~/.mongodb && \
wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O ~/.mongodb/root.crt && \
chmod 0600 ~/.mongodb/root.crt

Примеры строк подключения

Примеры проверялись в следующем окружении:

  • Виртуальная машина в Облаке c Ubuntu 20.04 LTS.
  • Bash: 5.0.16.
  • Python: 3.8.2; pip3: 20.0.2.
  • PHP: 7.4.3.
  • OpenJDK: 11.0.8; Maven: 3.6.3.
  • Node.JS: 10.19.0, npm: 6.14.4.
  • Go: 1.13.8.
  • Ruby: 2.7.0p0.
  • unixODBC: 2.3.6.

Вы можете подключаться к MongoDB-хостам в публичном доступе только с использованием SSL-сертификата. Перед подключением к таким хостам подготовьте сертификат.

В этих примерах предполагается, что SSL-сертификат root.crt расположен в директории /home/<домашняя директория>/.mongodb/.

Подключение без использования SSL-сертификата поддерживается только для хостов, находящихся не в публичном доступе. В этом случае трафик внутри виртуальной сети при подключении к БД шифроваться не будет.

Запросы на запись будут автоматически направлены к основной реплике кластера.

Пример команды с заполненным FQDN хоста вы можете посмотреть в консоли управления, нажав на кнопку Подключиться на странице кластера.

Подключение к кластеру без шардирования

Bash
Python
PHP
Java
Node.js
Go

Перед подключением установите утилиту Mongo Shell.

Актуальные версии Mongo Shell можно найти в разделе загрузок на сайте MongoDB.

Подключение с использованием SSL-соединения для mongo версии 4.2 и выше:

mongo --norc \
      --tls \
      --tlsCAFile /home/<домашняя директория>/.mongodb/root.crt \
      --host '<имя набора реплик>/<FQDN хоста 1 MongoDB>:27018,...,FQDN хоста N MongoDB>:27018' \
      -u <имя пользователя БД> \
      <имя БД>

Подключение с использованием SSL-соединения для более старых версий mongo:

mongo --norc \
      --ssl \
      --sslCAFile /home/<домашняя директория>/.mongodb/root.crt \
      --host '<имя набора реплик>/<FQDN хоста 1 MongoDB>:27018,...,FQDN хоста N MongoDB>:27018' \
      -u <имя пользователя БД> \
      <имя БД>

Подключение без использования SSL-соединения:

mongo --norc \
      --host '<FQDN хоста 1 MongoDB>:27018,...,FQDN хоста N MongoDB>:27018' \
      -u <имя пользователя БД> \
      <имя БД>

После выполнения любой из команд введите пароль пользователя для завершения процедуры подключения.

После подключения к СУБД выполните команду db.

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y python3 python3-pip && \
pip3 install pyMongo

Пример кода для подключения с использованием SSL-соединения:

connect.py

import ssl
import pymongo
from urllib.parse import quote_plus as quote

CACERT = '/home/<домашняя директория>/.mongodb/root.crt'
DB_RS = '<имя набора реплик>'
DB_NAME = '<имя БД>'
DB_HOSTS =','.join([
      '<FQDN хоста 1 MongoDB>:27018',
      ...,
      '<FQDN хоста N MongoDB>:27018'
    ])
DB_USER = '<имя пользователя БД>'
DB_PASS = '<пароль пользователя БД>'

url = 'mongodb://{user}:{pw}@{hosts}/?replicaSet={rs}&authSource={auth_src}'.format(
          user = quote(DB_USER),
          pw = quote(DB_PASS),
          rs = DB_RS,
          hosts = DB_HOSTS,
          auth_src = DB_NAME)

conn = pymongo.MongoClient(
    url,
    ssl_ca_certs = CACERT,
    ssl_cert_reqs=ssl.CERT_REQUIRED)

db = conn[DB_NAME]
print(db.name)

conn.close()

Пример кода для подключения без использования SSL-соединения:

connect.py

import ssl
import pymongo
from urllib.parse import quote_plus as quote

DB_RS = '<имя набора реплик>'
DB_NAME = '<имя БД>'
DB_HOSTS =','.join([
      '<FQDN хоста 1 MongoDB>:27018',
      ...,
      '<FQDN хоста N MongoDB>:27018'
    ])
DB_USER = '<имя пользователя БД>'
DB_PASS = '<пароль пользователя БД>'

url = 'mongodb://{user}:{pw}@{hosts}/?replicaSet={rs}&authSource={auth_src}'.format(
          user = quote(DB_USER),
          pw = quote(DB_PASS),
          rs = DB_RS,
          hosts = DB_HOSTS,
          auth_src = DB_NAME)

conn = pymongo.MongoClient(url)

db = conn[DB_NAME]
print(db.name)

conn.close()

Подключение:

python3 connect.py

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y php php-mongodb

Пример кода для подключения с использованием SSL-соединения:

connect.php

<?php
  $DB_RS    = '<имя набора реплик>';
  $DB_NAME  = '<имя БД>';
  $DB_HOSTS = '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018'; 
  $DB_USER  = '<имя пользователя БД>';
  $DB_PASS  = '<пароль пользователя БД>';
  $CACERT   = '/home/<домашняя директория>/.mongodb/root.crt';

  $uri = sprintf(
      'mongodb://%s:%s@%s/%s?replicaSet=%s',
      $DB_USER,
      $DB_PASS,
      $DB_HOSTS,
      $DB_NAME,
      $DB_RS
  );

  $conn = new \MongoDB\Driver\Manager($uri, ["tls" => "true", "tlsCAFile" => $CACERT], []);
  $command = new MongoDB\Driver\Command(array("ping" => 1));

  try {
      $cursor = $conn->executeCommand($DB_NAME, $command);
        $response = $cursor->toArray()[0];
  } catch(MongoDB\Driver\Exception $ex) {
      echo "$ex->getMessage()";
      exit;
  }

  var_dump($response);
?>

Пример кода для подключения без использования SSL-соединения:

connect.php

<?php
  $DB_RS    = '<имя набора реплик>';
  $DB_NAME  = '<имя БД>';
  $DB_HOSTS = '<FQDN хоста 1 MongoDB>:27018,...,<FQDN хоста N MongoDB>:27018'; 
  $DB_USER  = '<имя пользователя БД>';
  $DB_PASS  = '<пароль пользователя БД>';

  $uri = sprintf(
      'mongodb://%s:%s@%s/%s?replicaSet=%s',
      $DB_USER,
      $DB_PASS,
      $DB_HOSTS,
      $DB_NAME,
      $DB_RS
  );

  $conn = new \MongoDB\Driver\Manager($uri);
  $command = new MongoDB\Driver\Command(array("ping" => 1));

  try {
      $cursor = $conn->executeCommand($DB_NAME, $command);
      $response = $cursor->toArray()[0];
  } catch(MongoDB\Driver\Exception $ex) {
      echo "$ex->getMessage()";
      exit;
  }

  var_dump($response);
?>

Подключение:

php connect.php

Перед подключением:

  1. Установите зависимости:

    sudo apt update && sudo apt install -y default-jdk maven
    
  2. Добавьте SSL-сертификат в хранилище доверенных сертификатов Java (Java Key Store), чтобы драйвер MongoDB мог использовать этот сертификат при защищенном подключении к хостам кластера. При этом задайте пароль в параметре -storepass для дополнительной защиты хранилища:

    cd ~/.mongodb && \
    keytool -importcert -alias YARootCrt -file root.crt \
      -keystore YATrustStore -storepass <пароль хранилища сертификатов> \
      --noprompt
    
  3. Создайте директорию для проекта Maven:

    cd ~/ && mkdir -p project/src/java/com/example && cd project/
    
  4. Создайте конфигурационный файл для Maven:

    pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>app</artifactId>
        <packaging>jar</packaging>
        <version>0.1.0</version>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongodb-driver-sync</artifactId>
                <version>4.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>1.7.30</version>
            </dependency>
        </dependencies>
        <build>
            <finalName>${project.artifactId}-${project.version}</finalName>
            <sourceDirectory>src</sourceDirectory>
            <resources>
                <resource>
                    <directory>src</directory>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>attached</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <descriptorRefs>
                                    <descriptorRef>jar-with-dependencies</descriptorRef>
                                </descriptorRefs>
                                <archive>
                                    <manifest>
                                        <mainClass>com.example.App</mainClass>
                                    </manifest>
                                </archive>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.example.App</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    Актуальные версии зависимостей для Maven:

    • mongodb-driver-sync.
    • slf4j-simple.

Пример кода для подключения с использованием SSL-соединения:

src/java/com/example/App.java

package com.example;

import java.util.*;
import com.mongodb.*;
import com.mongodb.client.*;

public class App {
  public static void main(String[] args) {

    System.setProperty("javax.net.ssl.trustStore", "/home/<домашняя директория>/.mongodb/YATrustStore");
    System.setProperty("javax.net.ssl.trustStorePassword", "<пароль хранилища сертификатов>");

    final Integer DB_PORT = 27018;

    List DB_HOSTS = new ArrayList<ServerAddress>();
    DB_HOSTS.add(new ServerAddress("<FQDN хоста 1 MongoDB>", DB_PORT));
    ...
    DB_HOSTS.add(new ServerAddress("<FQDN хоста N MongoDB>", DB_PORT));

    final String DB_NAME = "<имя БД>";
    final String DB_USER = "<имя пользователя БД>";
    final String DB_PASS = "<пароль пользователя БД>";

    MongoClient conn = MongoClients.create(
        MongoClientSettings.builder()
              .applyToClusterSettings(builder -> builder.hosts(DB_HOSTS))
              .applyToSslSettings(builder -> builder.enabled(true))
              .credential(MongoCredential.createCredential(DB_USER, DB_NAME, DB_PASS.toCharArray()))
              .build());

    System.out.println(conn.getDatabase(DB_NAME).getName());

    conn.close();
  }
}

Пример кода для подключения без использования SSL-соединения:

src/java/com/example/App.java

package com.example;

import java.util.*;
import com.mongodb.*;
import com.mongodb.client.*;

public class App {
  public static void main(String[] args) {

    final Integer DB_PORT = 27018;

    List DB_HOSTS = new ArrayList<ServerAddress>();
    DB_HOSTS.add(new ServerAddress("<FQDN хоста 1 MongoDB>", DB_PORT));
    ...
    DB_HOSTS.add(new ServerAddress("<FQDN хоста N MongoDB>", DB_PORT));

    final String DB_NAME = "<имя БД>";
    final String DB_USER = "<имя пользователя БД>";
    final String DB_PASS = "<пароль пользователя БД>";

    MongoClient conn = MongoClients.create(
        MongoClientSettings.builder()
              .applyToClusterSettings(builder -> builder.hosts(DB_HOSTS))
              .credential(MongoCredential.createCredential(DB_USER, DB_NAME, DB_PASS.toCharArray()))
              .build());

    System.out.println(conn.getDatabase(DB_NAME).getName());

    conn.close();
  }
}

Подключение:

mvn clean package && \
java -jar target/app-0.1.0-jar-with-dependencies.jar
sudo apt update && sudo apt install -y nodejs npm && \
npm install mongodb

Пример кода для подключения с использованием SSL-соединения:

app.js

const util = require('util');
const MongoClient = require('mongodb').MongoClient;

const DB_RS = '<имя набора реплик>'
const DB_NAME = '<имя БД>'
const DB_HOSTS = ['<FQDN хоста 1 MongoDB>:27018',
                  ... 
                  '<FQDN хоста N MongoDB>:27018']
const DB_USER  = '<имя пользователя БД>'
const DB_PASS  = '<пароль пользователя БД>'
const CACERT   = '/home/<домашняя директория>/.mongodb/root.crt'

const url = util.format('mongodb://%s:%s@%s/', DB_USER, DB_PASS, DB_HOSTS.join(','))

const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  tls: true,
  tlsCAFile: CACERT,
  replicaSet: DB_RS,
  authSource: DB_NAME
}

MongoClient.connect(url, options, function(err, conn) {
  if (conn.isConnected()) {
    const db = conn.db(DB_NAME)
    console.log(db.databaseName)
  }

  conn.close()
})

Пример кода для подключения без использования SSL-соединения:

app.js

const util = require('util');
const MongoClient = require('mongodb').MongoClient;

const DB_RS = '<имя набора реплик>'
const DB_NAME = '<имя БД>'
const DB_HOSTS = ['<FQDN хоста 1 MongoDB>:27018',
                  ... 
                  '<FQDN хоста N MongoDB>:27018']
const DB_USER  = '<имя пользователя БД>'
const DB_PASS  = '<пароль пользователя БД>'

const url = util.format('mongodb://%s:%s@%s/', DB_USER, DB_PASS, DB_HOSTS.join(','))

const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  replicaSet: DB_RS,
  authSource: DB_NAME
}

MongoClient.connect(url, options, function(err, conn) {
  if (conn.isConnected()) {
    const db = conn.db(DB_NAME)
    console.log(db.databaseName)
  }

  conn.close()
}) 

Подключение:

node app.js

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y golang git && \
go get go.mongodb.org/mongo-driver/mongo

Пример кода для подключения с использованием SSL-соединения:

connect.go

package main

import (
      "fmt"
      "strings"
      "context"
      "go.mongodb.org/mongo-driver/mongo"
      "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {

      const DB_RS = "<имя набора реплик>"
      const DB_NAME = "<имя БД>"
      DB_HOSTS := []string {"<FQDN хоста 1 MongoDB>:27018",
                            ... 
                            "<FQDN хоста N MongoDB>:27018"}
      const DB_USER = "<имя пользователя БД>"
      const DB_PASS = "<пароль пользователя БД>"

      const CACERT = "/home/<домашняя директория>/.mongodb/root.crt"

      url := fmt.Sprintf("mongodb://%s:%s@%s/%s?replicaSet=%s&tls=true&tlsCaFile=%s",
              DB_USER,
              DB_PASS,
              strings.Join(DB_HOSTS, ","),
              DB_NAME,
              DB_RS,
              CACERT)

      conn, err := mongo.Connect(context.Background(), options.Client().ApplyURI(url))
      if err != nil {
              panic(err)
      }

      defer conn.Disconnect(context.Background())

      fmt.Println(conn.Database(DB_NAME).Name())
}

Пример кода для подключения без использования SSL-соединения:

connect.go

package main

import (
      "fmt"
      "strings"
      "context"
      "go.mongodb.org/mongo-driver/mongo"
      "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {

      const DB_RS = "<имя набора реплик>"
      const DB_NAME = "<имя БД>"
      DB_HOSTS := []string {"<FQDN хоста 1 MongoDB>:27018",
                            ... 
                            "<FQDN хоста N MongoDB>:27018"}
      const DB_USER = "<имя пользователя БД>"
      const DB_PASS = "<пароль пользователя БД>"

      url := fmt.Sprintf("mongodb://%s:%s@%s/%s?replicaSet=%s&tls=false",
              DB_USER,
              DB_PASS,
              strings.Join(DB_HOSTS, ","),
              DB_NAME,
              DB_RS)

      conn, err := mongo.Connect(context.Background(), options.Client().ApplyURI(url))
      if err != nil {
              panic(err)
      }

      defer conn.Disconnect(context.Background())

      fmt.Println(conn.Database(DB_NAME).Name())
}

Подключение:

go run connect.go

При успешном подключении к кластеру и выполнении тестового запроса будут выведены:

  1. Для примеров на PHP — результат выполнения команды ping.
  2. Для других примеров — имя БД, к которой было выполнено подключение.

Подключение к кластеру с шардированием

Bash
Python
PHP
Java
Node.js
Go

Перед подключением установите утилиту Mongo Shell.

Актуальные версии Mongo Shell можно найти в разделе загрузок на сайте MongoDB.

Подключение с использованием SSL-соединения для mongo версии 4.2 и выше:

mongo --norc \
      --tls \
      --tlsCAFile /home/<домашняя директория>/.mongodb/root.crt \
      --host '<FQDN хоста 1 MONGOINFRA или MONGOS>:27017,...,FQDN хоста N MONGOINFRA или MONGOS>:27017' \
      -u <имя пользователя БД> \
      <имя БД>

Подключение с использованием SSL-соединения для более старых версий mongo:

mongo --norc \
      --ssl \
      --sslCAFile /home/<домашняя директория>/.mongodb/root.crt \
      --host '<FQDN хоста 1 MONGOINFRA или MONGOS>:27017,...,FQDN хоста N MONGOINFRA или MONGOS>:27017' \
      -u <имя пользователя БД> \
      <имя БД>

Подключение без использования SSL-соединения:

mongo --norc \
      --host '<FQDN хоста 1 MONGOINFRA или MONGOS>:27017,...,FQDN хоста N MONGOINFRA или MONGOS>:27017' \
      -u <имя пользователя БД> \
      <имя БД>

После выполнения любой из команд введите пароль пользователя для завершения процедуры подключения.

После подключения к СУБД выполните команду db.

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y python3 python3-pip && \
pip3 install pyMongo

Пример кода для подключения с использованием SSL-соединения:

connect.py

import ssl
import pymongo
from urllib.parse import quote_plus as quote

CACERT = '/home/<домашняя директория>/.mongodb/root.crt'
DB_NAME = '<имя БД>'
DB_HOSTS =','.join([
      '<FQDN хоста 1 MONGOINFRA или MONGOS>:27017',
      ...,
      '<FQDN хоста N MONGOINFRA или MONGOS>:27017'
    ])
DB_USER = '<имя пользователя БД>'
DB_PASS = '<пароль пользователя БД>'

url = 'mongodb://{user}:{pw}@{hosts}/?authSource={auth_src}'.format(
          user = quote(DB_USER),
          pw = quote(DB_PASS),
          hosts = DB_HOSTS,
          auth_src = DB_NAME)

conn = pymongo.MongoClient(
    url,
    ssl_ca_certs = CACERT,
    ssl_cert_reqs=ssl.CERT_REQUIRED)

db = conn[DB_NAME]
print(db.name)

conn.close()

Пример кода для подключения без использования SSL-соединения:

connect.py

import ssl
import pymongo
from urllib.parse import quote_plus as quote

DB_NAME = '<имя БД>'
DB_HOSTS =','.join([
      '<FQDN хоста 1 MONGOINFRA или MONGOS>:27017',
      ...,
      '<FQDN хоста N MONGOINFRA или MONGOS>:27017'
    ])
DB_USER = '<имя пользователя БД>'
DB_PASS = '<пароль пользователя БД>'

url = 'mongodb://{user}:{pw}@{hosts}/?authSource={auth_src}'.format(
          user = quote(DB_USER),
          pw = quote(DB_PASS),
          hosts = DB_HOSTS,
          auth_src = DB_NAME)

conn = pymongo.MongoClient(url)

db = conn[DB_NAME]
print(db.name)

conn.close()

Подключение:

python3 connect.py

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y php php-mongodb

Пример кода для подключения с использованием SSL-соединения:

connect.php

<?php
  $DB_NAME  = '<имя БД>';
  $DB_HOSTS = '<FQDN хоста 1 MONGOINFRA или MONGOS>:27017,...,<FQDN хоста N MONGOINFRA или MONGOS>:27017'; 
  $DB_USER  = '<имя пользователя БД>';
  $DB_PASS  = '<пароль пользователя БД>';
  $CACERT   = '/home/<домашняя директория>/.mongodb/root.crt';

  $uri = sprintf(
      'mongodb://%s:%s@%s/%s',
      $DB_USER,
      $DB_PASS,
      $DB_HOSTS,
      $DB_NAME
  );

  $conn = new \MongoDB\Driver\Manager($uri, ["tls" => "true", "tlsCAFile" => $CACERT], []);
  $command = new MongoDB\Driver\Command(array("ping" => 1));

  try {
      $cursor = $conn->executeCommand($DB_NAME, $command);
        $response = $cursor->toArray()[0];
  } catch(MongoDB\Driver\Exception $ex) {
      echo "$ex->getMessage()";
      exit;
  }

  var_dump($response);
?>

Пример кода для подключения без использования SSL-соединения:

connect.php

<?php
  $DB_NAME  = '<имя БД>';
  $DB_HOSTS = '<FQDN хоста 1 MONGOINFRA или MONGOS>:27017,...,<FQDN хоста N MONGOINFRA или MONGOS>:27017'; 
  $DB_USER  = '<имя пользователя БД>';
  $DB_PASS  = '<пароль пользователя БД>';

  $uri = sprintf(
      'mongodb://%s:%s@%s/%s',
      $DB_USER,
      $DB_PASS,
      $DB_HOSTS,
      $DB_NAME
  );

  $conn = new \MongoDB\Driver\Manager($uri);
  $command = new MongoDB\Driver\Command(array("ping" => 1));

  try {
      $cursor = $conn->executeCommand($DB_NAME, $command);
      $response = $cursor->toArray()[0];
  } catch(MongoDB\Driver\Exception $ex) {
      echo "$ex->getMessage()";
      exit;
  }

  var_dump($response);
?>

Подключение:

php connect.php

Перед подключением:

  1. Установите зависимости:

    sudo apt update && sudo apt install -y default-jdk maven
    
  2. Добавьте SSL-сертификат в хранилище доверенных сертификатов Java (Java Key Store), чтобы драйвер MongoDB мог использовать этот сертификат при защищенном подключении к хостам кластера. При этом задайте пароль в параметре -storepass для дополнительной защиты хранилища:

    cd ~/.mongodb && \
    keytool -importcert -alias YARootCrt -file root.crt \
      -keystore YATrustStore -storepass <пароль хранилища сертификатов> \
      --noprompt
    
  3. Создайте директорию для проекта Maven:

    cd ~/ && mkdir -p project/src/java/com/example && cd project/
    
  4. Создайте конфигурационный файл для Maven:

    pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>app</artifactId>
        <packaging>jar</packaging>
        <version>0.1.0</version>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongodb-driver-sync</artifactId>
                <version>4.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>1.7.30</version>
            </dependency>
        </dependencies>
        <build>
            <finalName>${project.artifactId}-${project.version}</finalName>
            <sourceDirectory>src</sourceDirectory>
            <resources>
                <resource>
                    <directory>src</directory>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>attached</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <descriptorRefs>
                                    <descriptorRef>jar-with-dependencies</descriptorRef>
                                </descriptorRefs>
                                <archive>
                                    <manifest>
                                        <mainClass>com.example.App</mainClass>
                                    </manifest>
                                </archive>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.example.App</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    Актуальные версии зависимостей для Maven:

    • mongodb-driver-sync.
    • slf4j-simple.

Пример кода для подключения с использованием SSL-соединения:

src/java/com/example/App.java

package com.example;

import java.util.*;
import com.mongodb.*;
import com.mongodb.client.*;

public class App {
  public static void main(String[] args) {

    System.setProperty("javax.net.ssl.trustStore", "/home/<домашняя директория>/.mongodb/YATrustStore");
    System.setProperty("javax.net.ssl.trustStorePassword", "<пароль хранилища сертификатов>");

    final Integer DB_PORT = 27017;

    List DB_HOSTS = new ArrayList<ServerAddress>();
    DB_HOSTS.add(new ServerAddress("<FQDN хоста 1 MONGOINFRA или MONGOS>", DB_PORT));
    ...
    DB_HOSTS.add(new ServerAddress("<FQDN хоста N MONGOINFRA или MONGOS>", DB_PORT));

    final String DB_NAME = "<имя БД>";
    final String DB_USER = "<имя пользователя БД>";
    final String DB_PASS = "<пароль пользователя БД>";

    MongoClient conn = MongoClients.create(
        MongoClientSettings.builder()
              .applyToClusterSettings(builder -> builder.hosts(DB_HOSTS))
              .applyToSslSettings(builder -> builder.enabled(true))
              .credential(MongoCredential.createCredential(DB_USER, DB_NAME, DB_PASS.toCharArray()))
              .build());

    System.out.println(conn.getDatabase(DB_NAME).getName());

    conn.close();
  }
}

Пример кода для подключения без использования SSL-соединения:

src/java/com/example/App.java

package com.example;

import java.util.*;
import com.mongodb.*;
import com.mongodb.client.*;

public class App {
  public static void main(String[] args) {

    final Integer DB_PORT = 27017;

    List DB_HOSTS = new ArrayList<ServerAddress>();
    DB_HOSTS.add(new ServerAddress("<FQDN хоста 1 MONGOINFRA или MONGOS>", DB_PORT));
    ...
    DB_HOSTS.add(new ServerAddress("<FQDN хоста N MONGOINFRA или MONGOS>", DB_PORT));

    final String DB_NAME = "<имя БД>";
    final String DB_USER = "<имя пользователя БД>";
    final String DB_PASS = "<пароль пользователя БД>";

    MongoClient conn = MongoClients.create(
        MongoClientSettings.builder()
              .applyToClusterSettings(builder -> builder.hosts(DB_HOSTS))
              .credential(MongoCredential.createCredential(DB_USER, DB_NAME, DB_PASS.toCharArray()))
              .build());

    System.out.println(conn.getDatabase(DB_NAME).getName());

    conn.close();
  }
}

Подключение:

mvn clean package && \
java -jar target/app-0.1.0-jar-with-dependencies.jar
sudo apt update && sudo apt install -y nodejs npm && \
npm install mongodb

Пример кода для подключения с использованием SSL-соединения:

app.js

const util = require('util');
const MongoClient = require('mongodb').MongoClient;

const DB_NAME = '<имя БД>'
const DB_HOSTS = ['<FQDN хоста 1 MONGOINFRA или MONGOS>:27017',
                  ... 
                  '<FQDN хоста N MONGOINFRA или MONGOS>:27017']
const DB_USER  = '<имя пользователя БД>'
const DB_PASS  = '<пароль пользователя БД>'
const CACERT   = '/home/<домашняя директория>/.mongodb/root.crt'

const url = util.format('mongodb://%s:%s@%s/', DB_USER, DB_PASS, DB_HOSTS.join(','))

const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  tls: true,
  tlsCAFile: CACERT,
  authSource: DB_NAME
}

MongoClient.connect(url, options, function(err, conn) {
  if (conn.isConnected()) {
    const db = conn.db(DB_NAME)
    console.log(db.databaseName)
  }

  conn.close()
})

Пример кода для подключения без использования SSL-соединения:

app.js

const util = require('util');
const MongoClient = require('mongodb').MongoClient;

const DB_NAME = '<имя БД>'
const DB_HOSTS = ['<FQDN хоста 1 MONGOINFRA или MONGOS>:27018',
                  ... 
                  '<FQDN хоста N MONGOINFRA или MONGOS>:27018']
const DB_USER  = '<имя пользователя БД>'
const DB_PASS  = '<пароль пользователя БД>'

const url = util.format('mongodb://%s:%s@%s/', DB_USER, DB_PASS, DB_HOSTS.join(','))

const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  authSource: DB_NAME
}

MongoClient.connect(url, options, function(err, conn) {
  if (conn.isConnected()) {
    const db = conn.db(DB_NAME)
    console.log(db.databaseName)
  }

  conn.close()
}) 

Подключение:

node app.js

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y golang git && \
go get go.mongodb.org/mongo-driver/mongo

Пример кода для подключения с использованием SSL-соединения:

connect.go

package main

import (
      "fmt"
      "strings"
      "context"
      "go.mongodb.org/mongo-driver/mongo"
      "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {

      const DB_NAME = "<имя БД>"
      DB_HOSTS := []string {"<FQDN хоста 1 MONGOINFRA или MONGOS>:27017",
                            ... 
                            "<FQDN хоста N MONGOINFRA или MONGOS>:27017"}
      const DB_USER = "<имя пользователя БД>"
      const DB_PASS = "<пароль пользователя БД>"

      const CACERT = "/home/<домашняя директория>/.mongodb/root.crt"

      url := fmt.Sprintf("mongodb://%s:%s@%s/%s?tls=true&tlsCaFile=%s",
              DB_USER,
              DB_PASS,
              strings.Join(DB_HOSTS, ","),
              DB_NAME,
              CACERT)

      conn, err := mongo.Connect(context.Background(), options.Client().ApplyURI(url))
      if err != nil {
              panic(err)
      }

      defer conn.Disconnect(context.Background())

      fmt.Println(conn.Database(DB_NAME).Name())
}

Пример кода для подключения без использования SSL-соединения:

connect.go

package main

import (
      "fmt"
      "strings"
      "context"
      "go.mongodb.org/mongo-driver/mongo"
      "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {

      const DB_NAME = "<имя БД>"
      DB_HOSTS := []string {"<FQDN хоста 1 MONGOINFRA или MONGOS>:27017",
                            ... 
                            "<FQDN хоста N MONGOINFRA или MONGOS>:27017"}
      const DB_USER = "<имя пользователя БД>"
      const DB_PASS = "<пароль пользователя БД>"

      url := fmt.Sprintf("mongodb://%s:%s@%s/%s?tls=false",
              DB_USER,
              DB_PASS,
              strings.Join(DB_HOSTS, ","),
              DB_NAME)

      conn, err := mongo.Connect(context.Background(), options.Client().ApplyURI(url))
      if err != nil {
              panic(err)
      }

      defer conn.Disconnect(context.Background())

      fmt.Println(conn.Database(DB_NAME).Name())
}

Подключение:

go run connect.go

При успешном подключении к кластеру и выполнении тестового запроса будут выведены:

  1. Для примеров на PHP — результат выполнения команды ping.
  2. Для других примеров — имя БД, к которой было выполнено подключение.
В этой статье:
  • Ограничения на количество подключений
  • Настройка SSL-сертификата
  • Примеры строк подключения
  • Подключение к кластеру без шардирования
  • Подключение к кластеру с шардированием
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»