Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for MongoDB
  • Начало работы
    • Все инструкции
      • Предварительная настройка
      • Подключение из приложений
        • Обзор
        • Примеры для подключения к нешардированному кластеру
        • Примеры для подключения к шардированному кластеру
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

В этой статье:

  • Go
  • Java
  • Node.js
  • PHP
  • Python
  1. Пошаговые инструкции
  2. Подключение
  3. Примеры кода
  4. Примеры для подключения к шардированному кластеру

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

Статья создана
Yandex Cloud
Обновлена 22 июля 2024 г.
  • Go
  • Java
  • Node.js
  • PHP
  • Python

GoGo

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

sudo apt update && sudo apt install --yes golang git && \
go get go.mongodb.org/mongo-driver/mongo
Подключение с SSL
Подключение без 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())
}

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())
}

О том, как получить FQDN хоста, см. инструкцию.

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

go run connect.go

JavaJava

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

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

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

    cd ~/.mongodb && \
    sudo keytool -importcert \
                 -alias YandexCA -file root.crt \
                 -keystore ssl -storepass <пароль> \
                 --noprompt
    

    Где storepass — пароль хранилища сертификатов, не короче 6 символов.

  3. Создайте директорию для проекта Maven:

    cd ~/ && \
    mkdir --parents 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
Подключение без 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();
  }
}

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();
  }
}

О том, как получить FQDN хоста, см. инструкцию.

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

mvn clean package && \
    java -jar target/app-0.1.0-jar-with-dependencies.jar

Node.jsNode.js

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

sudo apt update && sudo apt install --yes nodejs npm && \
npm install mongodb
Подключение с SSL
Подключение без 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()
})

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()
})

О том, как получить FQDN хоста, см. инструкцию.

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

node app.js

PHPPHP

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

sudo apt update && sudo apt install --yes php php-mongodb
Подключение с SSL
Подключение без 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);
?>

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);
?>

О том, как получить FQDN хоста, см. инструкцию.

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

php connect.php

PythonPython

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

sudo apt update && sudo apt install --yes python3 python3-pip && \
pip3 install pyMongo
Подключение с SSL
Подключение без 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,
    tls=True,
    tlsCAFile=CACERT)

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

conn.close()

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()

О том, как получить FQDN хоста, см. инструкцию.

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

python3 connect.py

Была ли статья полезна?

Предыдущая
Примеры для подключения к нешардированному кластеру
Следующая
Управление базами данных
Проект Яндекса
© 2025 ООО «Яндекс.Облако»