MongoDB - Подключение

В этом руководстве мы обсудим различные способы подключения к MongoDB.

Запуск службы MongoDB

В предыдущих руководствах мы обсуждаликак запустить службу MongoDB, вам просто нужно выполнить следующую команду в каталоге bin каталога установки MongoDBmongodbи всё.

После запуска MongoDB выводит некоторую необходимую информацию, а затем ничего не выводит, после чего ожидает установления соединений. Когда соединение установлено, начинается вывод информации журнала.

Вы можете использоватьMongoDB shellдля подключения к серверу MongoDB. Вы также можете использовать PHP для подключения к MongoDB. В этом руководстве мы будем использовать MongoDB shell для подключения к службе MongoDB, а в следующих главах мы расскажем, как подключаться к службам MongoDB через PHP, Python и Node.js.

Стандартный синтаксис подключения URI:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
  • mongodb://: заголовок протокола, указывает на использование MongoDB.
  • [username:password@]: (необязательно) информация для аутентификации, включая имя пользователя и пароль.
  • host1[:port1][,...hostN[:portN]]: адрес сервера и порт, которые могут быть адресом и портом одного или нескольких серверов MongoDB.
  • /[defaultauthdb]: (необязательно) база данных аутентификации по умолчанию.
  • [?options]: (необязательные) параметры подключения.

Стандартный формат подключения включает несколько параметров, как показано ниже:

  • authSource: указывает базу данных аутентификации.
  • replicaSet: указывает имя набора реплик.
  • ssl: включает SSL-подключение (true или false).
  • readPreference: указывает предпочтение чтения, напримерprimary, primaryPreferred, secondary, secondaryPreferred, nearest。
  • connectTimeoutMS: указывает тайм-аут подключения (milliseconds).
  • socketTimeoutMS: указывает тайм-аут сокета (milliseconds).

Подключение к локальному экземпляру MongoDB (порт по умолчанию 27017):

mongodb://localhost

Подключение к локальному экземпляру MongoDB с указанием базы данных:

mongodb://localhost/mydatabase

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

mongodb://username:password@localhost/mydatabase

Подключение к удалённому экземпляру MongoDB:

mongodb://remotehost:27017

Подключение к набору реплик:

mongodb://host1:27017,host2:27017,host3:27017/mydatabase?replicaSet=myReplicaSet

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

mongodb://username:password@localhost:27017/mydatabase?ssl=true

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

mongodb://username:password@localhost:27017/mydatabase?authSource=admin&ssl=true

Python (PyMongo)

Пример

from pymongo import MongoClient

client = MongoClient('mongodb://user:password@localhost:27017/mydatabase?authSource=admin')
db = client['mydatabase']

Node.js (Mongoose)

Пример

const mongoose = require('mongoose');

mongoose.connect('mongodb://user:password@localhost:27017/mydatabase?authSource=admin', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'ошибка подключения:'));
db.once('open', function() {
  console.log('Подключено к MongoDB');
});

PHP (Mongoose)

Пример

<?php
require 'vendor/autoload.php'; // Подключить файл автозагрузки Composer

$client = new MongoDB\Client("mongodb://localhost:27017"); // Подключиться к локальному экземпляру MongoDB
$database = $client->selectDatabase('mydatabase'); // Выбрать базу данных
$collection = $database->selectCollection('mycollection'); // Выбрать коллекцию

// Вставить документ
$result = $collection->insertOne(['name' => 'Alice', 'age' => 30]);
echo "Вставлено с Object ID '{$result->getInsertedId()}'";

// Запрос документа
$document = $collection->findOne(['name' => 'Alice']);
echo "Найден документ: " . json_encode($document);
?>

Java

Пример

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;

public class MongoDBConnection {
    public static void main(String[] args) {
        String uri = "mongodb://user:password@localhost:27017/mydatabase?authSource=admin";
        try (MongoClient mongoClient = MongoClients.create(uri)) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            System.out.println("Connected to MongoDB");
        }
    }
}

Пример

Подключитесь к службе MongoDB, используя порт по умолчанию.

mongodb://localhost

Подключитесь к службе MongoDB через оболочку:

./mongosh
Current Mongosh Log ID:    66792d6b87657ebec9ed70f1
Connecting to:        mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.9
Using MongoDB:        7.0.11
Using Mongosh:        2.2.9

На этом этапе вернитесь и посмотрите на окно, в котором вы выполняли команду./mongod, и вы увидите, откуда он подключился к серверу MongoDB. Вы увидите следующую информацию:

……省略信息……
2015-09-25T17:22:27.336+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2015-09-25T17:22:27.336+0800 I CONTROL  [initandlisten] options: { storage: { dbPath: "/data/db" } }
2015-09-25T17:22:27.350+0800 I NETWORK  [initandlisten] waiting for connections on port 27017
2015-09-25T17:22:36.012+0800 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open)  # 该行表明一个来自本机的连接

……省略信息……

Формат команды подключения к MongoDB

Чтобы подключиться к серверу MongoDB с использованием имени пользователя и пароля, вы должны использовать формат 'username:password@hostname/dbname', 'username' — это имя пользователя, 'password' — это пароль.

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

$ ./mongosh
MongoDB shell version: 4.0.9
connecting to: test

Подключитесь к локальной службе MongoDB, используя пользователя admin с паролем 123456. Результат вывода выглядит следующим образом:

> mongodb://admin:123456@localhost/
... 

Используйте имя пользователя и пароль для подключения и входа в указанную базу данных, формат следующий:

mongodb://admin:123456@localhost/test

Больше примеров подключения

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

mongodb://localhost

Войдите в базу данных admin на localhost с именем пользователя fred и паролем foobar.

mongodb://fred:foobar@localhost

Войдите в базу данных baz на localhost с именем пользователя fred и паролем foobar.

mongodb://fred:foobar@localhost/baz

Подключитесь к паре реплик: сервер 1 — example1.com, сервер 2 — example2.

mongodb://example1.com:27017,example2.com:27017

Подключитесь к набору реплик с тремя серверами (порты 27017, 27018 и 27019):

mongodb://localhost,localhost:27018,localhost:27019

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

mongodb://host1,host2,host3/?slaveOk=true

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

mongodb://host1,host2,host3/?connect=direct;slaveOk=true

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

Подключитесь к localhost в безопасном режиме:

mongodb://localhost/?safe=true

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

mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
Другие расширения