【Mongodb专题】之连接

1. 概述

本篇文章使用MongoDB shell来连接MongoDB服务,标准的URI连接语法:

1
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
  • mongodb://:协议头,表示使用 MongoDB。

  • [username:password@]:(可选)认证信息,包括用户名和密码。

  • host1[:port1][,…hostN[:portN]]:服务器地址和端口,可以是一个或多个 MongoDB 服务器的地址和端口。

  • /[defaultauthdb]:(可选)默认认证数据库。

  • [?options]:(可选)连接选项。

标准的连接格式包含了多个选项(options),如下所示:

  • authSource:指定认证数据库。

  • replicaSet:指定副本集的名称。

  • ssl:启用 SSL 连接(true 或 false)。

  • readPreference:指定读偏好,如 primary, primaryPreferred, secondary, secondaryPreferred, nearest。

  • connectTimeoutMS:指定连接超时时间(毫秒)。

  • socketTimeoutMS:指定套接字超时时间(毫秒)。

2. 连接方式

  1. 连接到本地 MongoDB 实例(默认端口 27017):

    1
    mongodb://localhost
  2. 连接到本地MongoDB实例,指定数据库

    1
    mongodb://localhost/mydatabase
  3. 使用用户名和密码连接到本地MongoDB实例

    1
    mongodb://username:password@localhost/mydatabase
  4. 连接到远程的MongoDB实例

    1
    mongodb://remotehost:27017
  5. 连接到副本集(Replica Set)

    1
    mongodb://host1:27017,host2:27017,host3:27017/mydatabase?replicaSet=myReplicaSet
  6. 使用 SSL 连接到 MongoDB:

    1
    mongodb://username:password@localhost:27017/mydatabase?ssl=true
  7. 使用多个选项连接

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

2.1 更多连接实例

  • 连接本地数据库服务器,端口是默认的
    1
    mongodb://localhost
  • 使用用户名fred,密码foobar登录localhost的admin数据库
    1
    mongodb://fred:foobar@localhost
  • 连接 replica pair, 服务器1为example1.com服务器2为example2
    1
    mongodb://example1.com:27017,example2.com:27017
  • 连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器
    1
    mongodb://host1,host2,host3/?slaveOk=true
  • 安全模式连接到localhost
    1
    mongodb://localhost/?safe=true
  • 以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒
    1
    mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000

3. Java连接

1
2
3
4
5
6
7
8
9
10
11
12
13
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");
}
}
}

4. Python(PyMongo)连接

1
2
3
4
from pymongo import MongoClient

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

5. Node.js(Mongoose)连接

1
2
3
4
5
6
7
8
9
10
11
12
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, 'connection error:'));
db.once('open', function() {
console.log('Connected to MongoDB');
});

6. PHP(Mongoose)连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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 "Inserted with Object ID '{$result->getInsertedId()}'";

// 查询文档
$document = $collection->findOne(['name' => 'Alice']);
echo "Found document: " . json_encode($document);
?>