mongo工具
备份-恢复
备份
# 备份库
mongodump -d meuat -o /data/db/backup/meuat-2025-0408
# 备份单表
mongodump -d prod -c t_new_delegation -o ./backupdb/table/恢复
# 恢复库
mongorestore -d meuat /tmpdata/meuat-2025-0408/meuat
# 恢复前删除
mongorestore -d test --drop /bak/mongodump/*
# 指定恢复单个集合到另一个库
mongorestore --uri="mongodb://admin:admin123456@localhost:27017/" \
--drop \
--nsFrom="db1.t_msg_account" \
--nsTo="mepro.t_msg_account" \
/data/tmpdata/bk1/db1/t_msg_account.bson用户
mongo --host 10.27.10.83 --port 27017 -u bunnyc -p --authenticationDatabase=bunnycdb
mongo --host 10.27.10.83 --port 27017 -u bunnyc -p 'passw0rd' --authenticationDatabase=bunnycdb
use bunnycdb
db.auth("bunnyc","Fcdseicx_f32")综合
> show dbs # 查看存在的数据库
> show collections # show 集合
# 查看表字段
db.me_contact_talk_history.findOne()
# 查看表字段 - 全
db.me_contact_talk_history.aggregate([
{ $project: { _id: 0, fields: { $objectToArray: "$$ROOT" } } },
{ $unwind: "$fields" },
{ $group: { _id: null, allFields: { $addToSet: "$fields.k" } } }
])检查和监控
mongostat --port 27017 -u myadmin -p 123456 --authenticationDatabase=admin
# 抓取当前正在执行中的 sql
db.currentOp()
# 查看耗时超过 1 秒的操作
db.currentOp({ "secs_running": { "$gt": 1 } });
# 查看运行时间超过 单位为微秒
db.currentOp({ "microsecs_running": { "$gt": 100000 } });数据
db.t_name.find()
db.t_host.find({"mess_code":1001})
db.local('/tmp/file.json') // 执行文件
db.t_name.remove()
db.t_name.drop()索引
// 查看表的索引
db.t_name.getIndexes();
// 创建联合索引
db.t_name.createIndex({ fromAddr: 1, toAddr: 1, address: 1 })
// 创建单字段索引
db.t_name.createIndex({ address: 1 })
// 后台创建索引 - 避免阻塞
db.t_name.ensureIndex({address:1},{background:true})
// 查看索引
db.t_name.getIndexes()
// 查询文档上的索引 - 名称
db.t_name.getIndexes().forEach(function(index) {
printjson(index.name)
})停服
use admin
db.auth("root","passw0rd")
db.shutdownServer();复杂查询
匹配条件
# sql 条件
$eq: 等于指定值
$ne: 不等于指定值
$gt: 大于指定值
$gte: 大于或等于指定值
$lt: 小于指定值
$lte: 小于或等于指定值
$in: 在指定数组中
$nin: 值不在指定数组中
$exists: 匹配包含指定字段
$type: 匹配指定数据类型
$regex: 使用正则表达式匹配字段值的文档
$not: 取反
$and
$or简单查询
db.getCollection("t1").find({'address': 'aaaaa'});
db.t_name.find({"ip":"10.26.2.20", "cpu":{$gt:20}})
db.t_name.find({field:{$gt:value}});
db.t_name.find({"cpu_rate":{$gt:9}}).count()
db.t_name.remove({height: {$gt:5251149}}) // 删除大于指定高度的记录
复杂查询
// 统计数量
db.t_name.count()
db.t_name.find().count()
db.t_name.find().limit(1) // 查询第一条
db.t_name.find().sort({_id: -1}).limit(1) // 查询最新一条
db.t_name.find({condition: "value"}).limit(1) // 过滤后的第一条
db.t_name.find().sort({field: 1}).limit(1) // 排序后的第一条
db.t_name.findOne() // 函数查询第一条
db.t_name.findOne({condition: "value"}) // 函数查询第一条-条件
// 按指定字段排序 - 取最大的值的一行
db.t_name.find().sort({ txs: -1 }).limit(1)
// 按指定字段排序 - 取最大的值的一行
db.t_name.aggregate([
{ $sort: { txs: -1 } },
{ $limit: 1 }
])按日期分组统计
var results = db.t_name.aggregate([
{
$group: {
_id: { $dateToString: { format: "%Y-%m-%d", date: "$timestamp" } },
count: { $sum: 1 }
}
},
{
$sort: { _id: 1 }
}
]).toArray();
results.forEach(function(result) {
printjson(result);
});遍历集合
// 获取当前数据库的所有集合名称
var collections = db.getCollectionNames();
// 遍历每个集合
collections.forEach(function(collectionName) {
// 获取当前集合
var collection = db.getCollection(collectionName);
// 查询集合中是否存在包含`height`字段的文档
var hasHeightField = collection.find({"height": {$exists: true}}).count() > 0;
// 如果存在`height`字段,打印集合名称
if (hasHeightField) {
print("Collection with 'height' field: " + collectionName);
}
});最后更新于