介绍mongo shell
mongo shell是MongoDB JavaScript交互接口,可以使用mongo shell完成 查询、更新和维护MongoDB的操作。
启动mongo Shell
### 1. cd目录执行
cd <mongodb installation dir>
./bin/mongo
示例:
$ cd /mongodb/bin/
$ ./mongo
MongoDB shell version v3.6.17
>
### 2. 环境变量已配置: <mongodb installation dir>/bin
可以直接执行mongo
示例:
$ mongo
MongoDB shell version v3.6.17
>
说明:运行mongo 不加参数时,默认连接 localhost 的 27017接口
.mongorc.js 文件
当运行mongo时会检查os用户的 HOME 目录 JavaScript文件 .mongorc.js ,
如果存在,则先执行文件中内容,–eval 参数指定的js文件优化执行,–norc 参数
可禁止 .mongorc.js 执行。
.mongorc.js 文件是 MongoDB 的一个配置文件,它允许你在每次启动 MongoDB shell (mongo) 时自动执行特定的 JavaScript 代码。这个文件通常位于用户的主目录中(例如,~/.mongorc.js),并且在 MongoDB shell 启动时会自动加载和执行。
作用
- 自动化配置:可以用来设置默认数据库、默认集合、或执行其他初始化操作。
- 定义函数:你可以在这个文件中定义常用的函数,方便在 shell 中直接调用。
- 别名和快捷方式:创建常用命令的别名或快捷方式,提高操作效率。
- 加载外部库:可以加载和使用外部的 JavaScript 库。
- 日志记录:可以记录 shell 会话的日志。
示例
下面是一个 .mongorc.js 文件的示例,展示了上述功能的实现:
// 设置默认数据库
db = db.getSiblingDB('myDatabase');
// 打印欢迎信息
print("Welcome to the MongoDB shell!");
// 定义一个常用的查询函数
function findRecentDocuments(collectionName, days) {
const collection = db.getCollection(collectionName);
const recentDate = new Date();
recentDate.setDate(recentDate.getDate() - days);
return collection.find({ createdAt: { $gte: recentDate } }).toArray();
}
// 创建一个别名,用于快速查看集合中的文档数
DBCollection.prototype.countDocuments = function() {
return this.count();
};
// 加载外部库
load('/path/to/external/library.js');
// 记录会话日志
const originalPrint = print;
print = function(message) {
originalPrint(message);
// 追加日志到文件
const fs = require('fs');
fs.write('/path/to/log.txt', message + '\n', 'a');
};
mongo Shell命令
1. 查询当前数据库
> db
test
>
2. 切换数据库
use <database>
> use orastar
switched to db orastar
> db
orastar
>
3. 查询有哪些数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
orastar 0.000GB
>
4. 插入数据
可以切换到不存在的数据库,并且给不存在的表插入数据,当在数据库存储数据时,
自动创建数据库和表。
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
orastar 0.000GB
> use myNewDatabase
switched to db myNewDatabase
> db.myCollection.insertOne( { x: 1 } );
{
"acknowledged" : true,
"insertedId" : ObjectId("66aac195c3973a5e06072f53")
}
> db.myCollection.find()
{ "_id" : ObjectId("66aac195c3973a5e06072f53"), "x" : 1 }
>
db.myCollection.insertOne: mongo中插入数据的命令
db: 当前数据库
myCollection: 表名,mongo中叫 collection。
5. 特殊表名查询
db.getCollection("3 test").find() db.getCollection("3-test").find() db.getCollection("stats").find()
6. 超长命令处理
mongo 中脚本限制为 4095 代码点每行,如果一行超过4095代码点,
将会被截取(truncate)
说明:代码点(codepoints ): 可理解为字符,绝大部分字符占1个代码点。
7. 输出美化
> db.myCollection.insert({x:1001,name:"zhangsan",addr:"xian"})
WriteResult({ "nInserted" : 1 })
>
> db.myCollection.deleteOne({x:1})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.myCollection.find().pretty()
{
"_id" : ObjectId("66aac6d73b4c71e67b7c291a"),
"x" : 1001,
"name" : "zhangsan",
"addr" : "xian"
}
> db.myCollection.find()
{ "_id" : ObjectId("66aac6d73b4c71e67b7c291a"), "x" : 1001, "name" : "zhangsan", "addr" : "xian" }
> db.myCollection.find().pretty()
{
"_id" : ObjectId("66aac6d73b4c71e67b7c291a"),
"x" : 1001,
"name" : "zhangsan",
"addr" : "xian"
}
>
8. 历史命令(up/down键)
使用 up/down键可以 显示历史命令
9. 命令补全()
db.myCollection.c<Tab>
10. 退出命令行
quit() or <Ctrl-C>
11. 修改提示词
在mongo shell中可以使用变量 prompt变更提示词,也可以将脚本添加到
.mongorc.js 文件中,每次登陆mongo shell生效
### 1. 显示操作行号
cmdCount = 1;
prompt = function() {
return (cmdCount++) + "> ";
}
### 2. 显示数据库和主机
cmdCount = 1;
prompt = function() {
return (cmdCount++) + "> ";
}
### 3. 显示系统起动时间及文档数量
prompt = function() {
return "Uptime:"+db.serverStatus().uptime+" Documents:"+db.stats().objects+" > ";
}
### 4. 使用外部编辑器
export EDITOR=vim
mongo
export EDITOR=vi
$ mongo
MongoDB shell version v3.6.17
> function myFunction () { }
> edit myFunction
> myFunction
function myFunction() {print("This was edited"); }
>
12. 修改批量显示
使用db.collection.find()命令时默认每天显示20行,输入 it 显示下一批20行,
可使用以下代码修改默认批量行数
DBQuery.shellBatchSize = 10;
13. mongo Shell帮助
### 1. 启动mongo shell帮助
mongo --help
### 2. mongo shell内帮助
help
### 3. 数据库帮助
db.help()
### 4. 查看函数实现代码,不输入函数()括号
db.updateUser
### 5. 表级帮助
show collections
db.collection.help()
#### 函数实现
db.collection.save
### 6、 游标级帮助
#### 获取帮助
db.collection.find().help()
#### 获取实现代码,不输入函数()括号
db.collection.find().toArray
### 7. 获取包装对象
help misc
14. mongo Shell中的多行操作
行末以’(’、’{’、’[‘结尾的,下面一行以’…'开始,直到添加 对应的结束符号
‘)’、’}’、’]’,如下所示
if ( x > 0 ) {
count++;
print (x);
}
> if ( x > 0 ) {
... count++;
... print (x);
... }
>
参考资料
https://www.mongodb.com/docs/manual/




