使用方法
快速上手,如何上手使用 FerretDB ?如何可靠地接入 FerretDB?如何使用 mongosh 客户端工具?
Module:
Categories:
安装客户端工具
你可以使用 MongoDB 的命令行工具 MongoSH 来访问 FerretDB。
pig
命令行工具可以用于添加 MongoDB 仓库,然后你可以使用 yum
或 apt
安装 mongosh
:
pig repo add mongo -u
yum install mongodb-mongosh
apt install mongodb-mongosh
连接到FerretDB
你可以使用 MongoDB 连接串,用任何语言的 MongoDB 驱动访问 FerretDB,这里以上面安装的 mongosh
命令行工具为例:
$ mongosh
Current Mongosh Log ID: 67ba8c1fe551f042bf51e943
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.4.0
Using MongoDB: 7.0.77
Using Mongosh: 2.4.0
For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/
test>
认证
你可以使用其他用户进行登陆,参阅 FerretDB:认证 获取详细信息。
mongosh 'mongodb://dbuser_meta:DBUser.Meta@10.10.10.10:27017/meta' # 业务管理员用户
mongosh 'mongodb://dbuser_view:DBUser.Viewer@10.10.10.10:27017/meta' # 只读用户
快速上手
你可以连接到 FerretDB 并假装它是一个 MongoDB 集群。
$ mongosh 'mongodb://dbuser_meta:DBUser.Meta@10.10.10.10:27017/meta'
MongoDB 的命令会被翻译为SQL
命令,在底下的 PostgreSQL 中执行:
use test // CREATE SCHEMA test;
db.dropDatabase(); // DROP SCHEMA test;
db.createCollection('posts'); // CREATE TABLE posts(_data JSONB,...)
db.posts.insertOne({ // INSERT INTO posts VALUES(...);
title: 'Post One',body: 'Body of post one',category: 'News',tags: ['news', 'events'],
user: {name: 'John Doe',status: 'author'},date: Date()}
);
db.posts.find().limit(2).pretty(); // SELECT * FROM posts LIMIT 2;
db.posts.createIndex({ title: 1 }) // CREATE INDEX ON posts(_data->>'title');
如果你不是很熟悉 MongoDB,这里有一个快速上手教程,同样适用于 FerretDB: Perform CRUD Operations with MongoDB Shell
如果你希望生成一些样例负载,可以使用 mongosh
执行以下的简易测试剧本:
cat > benchmark.js <<'EOF'
const coll = "testColl";
const numDocs = 1000;
for (let i = 0; i < numDocs; i++) { // insert
db.getCollection(coll).insertOne({ num: i, name: "MongoDB Benchmark Test" });
}
for (let i = 0; i < numDocs; i++) { // select
db.getCollection(coll).find({ num: i });
}
for (let i = 0; i < numDocs; i++) { // update
db.getCollection(coll).updateOne({ num: i }, { $set: { name: "Updated" } });
}
for (let i = 0; i < numDocs; i++) { // delete
db.getCollection(coll).deleteOne({ num: i });
}
EOF
mongosh 'mongodb://dbuser_meta:DBUser.Meta@10.10.10.10:27017' benchmark.js
你可以查阅 FerretDB 支持的 MongoDB命令,同时还有一些已知的区别,对于基本的使用来说,通常不是什么大问题。