云数据库MongoDB版完全兼容MongoDB协议,本文介绍如何使用不同语言的程序代码连接MongoDB副本集实例。
注意事项
如果副本集实例数据库账号的密码中包含特殊字符
!@#$%^&*()_+=
,您需要在连接串中对特殊字符进行转义处理,对应如下:
特殊字符 |
转义字符 |
! |
%21 |
@ |
%40 |
# |
%23 |
$ |
%24 |
% |
%25 |
^ |
%5e |
& |
%26 |
* |
%2a |
( |
%28 |
) |
%29 |
_ |
%5f |
+ |
%2b |
= |
%3d |
示例:密码为ab@#c
时,在连接串中对特殊字符进行转义处理,密码对应为ab%40%23c
。
Node.js连接示例
Node.js驱动相关信息,请参见MongoDB Node.js Driver。
- 在客户端执行如下命令,进行项目初始化。
mkdir node-mongodb-demo
cd node-mongodb-demo
npm init -y
- 执行如下命令,安装驱动包。
- 获取云数据库MongoDB副本集实例连接信息,如何获取,请参见副本集实例连接说明。
- 将如下示例代码保存为Node.js。
const MongoClient = require('mongodb').MongoClient;
// 库名称和集合名称。
const demoDb = "test";
const demoColl = "testColl";
// 建议使用副本集高可用地址,确保高可用。
// 确保执行代码的服务器和MongoDB实例网络是连通的。
// 如果密码中包含特殊字符,请进行转义处理。
const url = "mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****"
console.info("url:", url);
// 获取mongoClient。
const client = new MongoClient(url);
async function run() {
try {
//连接实例。
await client.connect();
//取得数据库句柄。
const database = client.db(demoDb);
//取得集合句柄。
const collection = database.collection(demoColl);
//组装记录。
const demoName = "Node For Demo";
const doc = { "DEMO": demoName, "MESG": "Hello AliCoudDB For MongoDB" };
console.info("ready insert document: ", doc);
//插入一条记录。
const result = await collection.insertOne(doc);
console.log(
`A document was inserted with the _id: ${result.insertedId}`,
);
//读取数据。
const filter = { "DEMO": demoName };
const findResult = await collection.find(filter);
await findResult.forEach(console.dir);
} finally {
//关闭连接。
await client.close();
}
}
run().catch(console.dir);
- 运行
node Node.js
。
PHP连接示例
PHP驱动相关信息,请参见MongoDB PHP Driver。
- 执行如下命令,安装驱动包。
$ pecl install mongodb
# 获取PHP的ini文件路径。
$ php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"
# 在ini文件中添加如下信息,如果已经有则不用添加。
$ extension=mongodb.so
# 创建并进入工程目录。
$ mkdir php-demo
$ cd php-demo
# 使用composer安装mongodb依赖。若未安装composer,可通过https://getcomposer.org/download/路径下载。
$ composer require mongodb/mongodb
- 获取云数据库MongoDB副本集实例连接信息,如何获取,请参见副本集实例连接说明。
- 将如下示例代码保存为main.php。
<?php
require 'vendor/autoload.php'; // include Composer goodies
// 建议使用副本集高可用地址,确保高可用。
// 确保执行代码的服务器和MongoDB实例网络是连通的。
// 如果密码中包含特殊字符,请进行转义处理。
$replicaset_url = 'mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****';
$test_db = 'test';
$test_coll = 'testColl';
// 创建mongoclient。
$client = new MongoDB\Client($replicaset_url);
$collection = $client->$test_db->$test_coll;
// 插入一条记录。
$result = $collection->insertOne(['name' => 'ApsaraDB for Mongodb', 'desc' => 'Hello, Mongodb']);
echo "Inserted with Object ID '{$result->getInsertedId()}'", "\n";
// 查询记录。
$result = $collection->find(['name' => 'ApsaraDB for Mongodb']);
foreach ($result as $entry) {
echo $entry->_id, ': ', $entry->name, "\n";
}
?>
- 运行
php -f main.php
。
Java连接示例
Java驱动相关信息,请参见MongoDB Java Driver。
本示例测试的环境为IDE(IntelliJ IDEA和Eclipse IDE)。IDE环境下连接副本集实例,JDK需为JDK 8及以上版本。
- 获取云数据库MongoDB副本集实例连接信息,如何获取,请参见副本集实例连接说明。
- 添加Maven依赖。
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.8.0</version>
</dependency>
</dependencies>
- Java示例代码。
// JDK 8及以上。
import static com.mongodb.client.model.Filters.eq;
import org.bson.Document;
import com.mongodb.MongoException;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.InsertOneResult;
public class Main {
public static void main( String[] args ) {
// 建议使用副本集高可用地址,确保高可用。
// 确保执行代码的服务器和MongoDB实例网络是连通的。
// 如果密码中包含特殊字符,请进行转义处理。
String uri = "mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****";
String demoDb = "test";
String demoColl = "testColl";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase(demoDb);
MongoCollection<Document> collection = database.getCollection(demoColl);
// 写入一条记录。
try {
InsertOneResult result = collection.insertOne(new Document()
.append("DEMO", "Java for Demo")
.append("MESG", "Hello AliCoudDB For MongoDB"));
System.out.println("Success! Inserted document id: " + result.getInsertedId());
} catch (MongoException me) {
System.err.println("Unable to insert due to an error: " + me);
}
// 查询第一条记录。
Document doc = collection.find(eq("DEMO", "Java for Demo")).first();
System.out.println(doc.toJson());
mongoClient.close();
}
}
}
- 在IDE工具中单击运行。
Python连接示例
Python驱动相关信息,请参见MongoDB Python Driver。
本示例测试的环境为Python 3.9。
- 安装pymongo。
- 获取云数据库MongoDB副本集实例连接信息,如何获取,请参见副本集实例连接说明。
- 将如下示例代码保存为Main.py。
# 代码运行环境为python3.9。
from pymongo import MongoClient
# 建议使用副本集高可用地址,确保高可用。
# 确保执行代码的服务器和MongoDB实例网络是连通的。
# 如果密码中包含特殊字符,请进行转义处理。
REPLICASET_URL = 'mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****'
testDb = 'test'
testColl = 'testColl'
# 获取mongoclient。
client = MongoClient(REPLICASET_URL)
# 插入一条记录。
doc = dict(DEMO="Python for demo", MESG="Hello ApsaraDB For MongoDB")
doc_id = client.testDb.testColl.insert_one(doc).inserted_id
print ('doc_id:', doc_id)
# 查询记录。
for d in client.testDb.testColl.find(dict(DEMO="Python for demo")):
print ('find documents:', d)
client.close()
- 运行
python3.9 Main.py
。
C#连接示例
C#驱动相关信息,请参见MongoDB C# Driver。
本示例测试的环境为IDE(Visual Studio)。
- 在Visual Studio中使用NuGet包管理工具(路径:)下载如下包。
- 获取云数据库MongoDB副本集实例连接信息,如何获取,请参见副本集实例连接说明。
- C#示例代码。
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
namespace Aliyun
{
class Program
{
static void Main(string[] args)
{
// 建议使用副本集高可用地址,确保高可用。
// 确保执行脚本的机器和实例网络是通常的。
// 如密码包含特殊字符,则需要转义。
const string replicaSetUrl = "mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****";
const string testDb = "test";
const string testColl = "testColl";
try
{
// 建立连接获取client。
MongoClient client = new MongoClient(replicaSetUrl);
// 获取集合。
var database = client.GetDatabase(testDb);
var collection = database.GetCollection<BsonDocument>(testColl);
// 插入一条记录。
var document = new BsonDocument
{
{ "name", "Csharp for Mongodb" },
{ "desc", "Hello ApsaraDB For MongoDB" }
};
collection.InsertOne(document);
Console.WriteLine("Insert done\n");
// 查询记录。
var cursor = collection.Find(new BsonDocument{ { "name", "Csharp for Mongodb" } }).ToCursor();
foreach (var doc in cursor.ToEnumerable())
{
Console.WriteLine(doc);
}
}
catch (Exception e)
{
Console.WriteLine("连接异常:" + e.Message);
}
}
}
}
- 在IDE工具中单击运行。
Go连接示例
Go驱动相关信息,请参见MongoDB Go Driver。
- 执行如下命令,安装驱动包。
go get go.mongodb.org/mongo-driver
- 获取云数据库MongoDB副本集实例连接信息,如何获取,请参见副本集实例连接说明。
- 将如下示例代码保存为main.go。
package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
)
func main() {
// 建议使用副本集高可用地址,确保高可用。
// 确保执行代码的服务器和MongoDB实例网络是连通的。
// 如果密码中包含特殊字符,请进行转义处理。
replicaSetUrl := "mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****"
testDb := "test"
testColl := "testColl"
clientOpts := options.Client().ApplyURI(replicaSetUrl)
// 连接Server,获取client。
client, err := mongo.Connect(context.TODO(), clientOpts)
if err != nil {
fmt.Println("connect failed!")
log.Fatal(err)
return
}
fmt.Println("connect successful!")
// 结束时断开连接。
defer func() {
if err = client.Disconnect(context.TODO()); err != nil {
fmt.Println("disconnect failed!")
log.Fatal(err)
}
fmt.Println("disconnect successful!")
}()
// 向Server发送Ping命令,验证连接成功。
if err = client.Ping(context.TODO(), nil); err != nil {
fmt.Println("ping failed!")
log.Fatal(err)
return
}
fmt.Println("ping successful!")
// 插入一条记录。
collection := client.Database(testDb).Collection(testColl)
res, err := collection.InsertOne(context.Background(), bson.M{"hello": "world"})
if err != nil {
fmt.Println("insert result failed!")
log.Fatal(err)
return
}
id := res.InsertedID
fmt.Println("Id: ", id)
fmt.Printf("insert result: %v\n", res)
// 查询记录。
result := bson.M{}
filter := bson.D{{"_id", res.InsertedID}}
if err := collection.FindOne(context.Background(), filter).Decode(&result); err != nil {
fmt.Println("find failed!")
log.Fatal(err)
return
}
fmt.Printf("result: %v\n", result)
}
- 运行
go run main.go
。