Mongodb脚本

#脚本准备
var tags = ["nosql","mongodb","document","developer","popular"]; 
var types = ["technology","sociality","travel","novel","literature"]; 
var books=[];

for(var i=0;i<50;i++){
		var typeIdx = Math.floor(Math.random()*types.length);
		var tagIdx = Math.floor(Math.random()*tags.length);
		var tagIdx2 = Math.floor(Math.random()*tags.length);
		var favCount = Math.floor(Math.random()*100);
		var username = "xx00"+Math.floor(Math.random()*10);
		var age = 20 + Math.floor(Math.random()*15);
		var book = {
			title: "book-"+i,
			type: types[typeIdx],
			tag: [tags[tagIdx],tags[tagIdx2]],
			favCount: favCount,
			author: {name:username,age:age}
			};
			books.push(book)
	}
db.books.insertMany(books);

#投影操作, 将原始字段投影成指定名称, 如将集合中的 title 投影成 name
db.books.aggregate([{$project:{name:"$title"}}])

#$project 可以灵活控制输出文档的格式,也可以剔除不需要的字段
db.books.aggregate([{$project:{name:"$title",_id:0,type:1,author:1}}])

#从嵌套文档中排除字段
db.books.aggregate([ {$project:{name:"$title",_id:0,type:1,"author.name":1}} ])
或者
db.books.aggregate([ {$project:{name:"$title",_id:0,type:1,author:{name:1}}} ])

#$match用于对文档进行筛选,之后可以在得到的文档子集上做聚合,$match可以使用除了地理空	间之
外的所有常规查询操作符,在实际应用中尽可能将$match放在管道的前面位置。这样有两个好处:一是
可以快速将不需要的文档过滤掉,以减少管道的工作量;二是如果再投射和分组之前执行$match,查询
可以使用索引。	
db.books.aggregate([{$match:{type:"novel"}}])

#$count 计数并返回与查询匹配的结果数	
db.books.aggregate([ {$match:{type:"novel"}}, {$count: "type_count"} ])

$match阶段筛选出type匹配technology的文档,并传到下一阶段;
$count阶段返回聚合管道中剩余文档的计数,并将该值分配给type_count	

#book的数量,收藏总数和平均值
db.books.aggregate([ {$group:{_id:null,count:{$sum:1},pop:{$sum:"$favCount"},avg: 	{$avg:"$favCount"}}} ])

#统计每个作者的book收藏总数
db.books.aggregate([ {$group:{_id:"$author.name",pop:{$sum:"$favCount"}}} ])

#统计每个作者的每本book的收藏数
db.books.aggregate([ {$group:{_id:{name:"$author.name",title:"$title"},pop:{$sum:"$favCount"}}} ]) 

#每个作者的book的type合集
db.books.aggregate([ {$group:{_id:"$author.name",types:{$addToSet:"$type"}}} ])

#姓名为xx006的作者的book的tag数组拆分为多个文档	
db.books.aggregate([ {$match:{"author.name":"xx006"}}, {$unwind:"$tag"} ])

#每个作者的book的tag合集
db.books.aggregate([ {$unwind:"$tag"}, {$group:{_id:"$author.name",types:{$addToSet:"$tag"}}} ]) 

#插入数据 
db.books.insert([ { "title" : "book-51", "type" : "technology", "favCount" : 11, "tag":[], "author" : { "name" : "fox", "age" : 28 } },{ "title" : "book-52", "type" : "technology", "favCount" : 15, "author" : { "name" : "fox", "age" : 28 } },{ "title" : "book-53", "type" : "technology", "tag" : [ "nosql", "document" ],"favCount" : 20, "author" : { "name" : "fox", "age" : 28 } }])

#测试,刚才插入数据
# 使用includeArrayIndex选项来输出数组元素的数组索引 
db.books.aggregate([ {$match:{"author.name":"fox"}}, {$unwind:{path:"$tag", includeArrayIndex: "arrayIndex"}} ])
# 使用preserveNullAndEmptyArrays选项在输出中包含缺少size字段,null或空数组的文档 
db.books.aggregate([ {$match:{"author.name":"fox"}}, {$unwind:{path:"$tag", preserveNullAndEmptyArrays: true}} ])

#统计每个分类的book文档数量
db.books.aggregate([
{$group:{_id:"$type",total:{$sum:1}}},
{$sort:{total:-1}}
])

#
db.books.aggregate([{
	$bucket:{
	groupBy:"$favCount",
	boundaries:[0,10,60,80,100],
	default:"other",
	output:{"count":{$sum:1}}
	}
}])

#插入数据脚本
var orders = new Array();
var shipping = new Array();
var addresses = [“广西省玉林市”, “湖南省岳阳市”, “湖北省荆州市”, “甘肃省兰州市”, “吉林省松原市”, “江西省景德镇”, “辽宁省沈阳市”, “福建省厦门市”, “广东省广州市”, “北京市朝阳区”];
for (var i = 10000; i < 20000; i++) {
var orderNo = i + Math.random().toString().substr(2, 5);
orders[i] = {
orderNo: orderNo,
userId: i,
price: Math.round(Math.random() *10000) / 100,
qty: Math.floor(Math.random() * 10) + 1,
orderTime: new Date(new Date().setSeconds(Math.floor(Math.random() * 10000)))
};
var address = addresses[Math.floor(Math.random() * 10)];
shipping[i] = {
orderNo: orderNo,
address: address,
recipienter: “Wilson”,
province: address.substr(0, 3),
city: address.substr(3, 3)
}
}
db.order.insert(orders);
db.shipping.insert(shipping);

以下是 MongoDB 数据库备份和还原的脚本示例: 备份脚本: ``` #!/bin/bash # MongoDB backup script # MongoDB credentials user="username" password="password" host="localhost" port="27017" db_name="database_name" # Other options backup_path="/path/to/backup/folder" date=$(date +"%d-%b-%Y") # Backup filename filename="$db_name-$date.tar.gz" # Backup command mongodump --host=$host --port=$port --username=$user --password=$password --db=$db_name --out=$backup_path/$db_name-$date # Compression command tar -zcvf $backup_path/$filename $backup_path/$db_name-$date # Remove uncompressed folder rm -rf $backup_path/$db_name-$date ``` 在备份脚本中,您需要将 `username`、`password`、`host`、`port` 和 `database_name` 替换为您的 MongoDB 访问凭据和数据库名称。`backup_path` 变量指定备份文件应该存储在哪个文件夹中,`date` 变量用于生成备份文件名。 在备份期间,`mongodump` 命令将备份文件存储在指定的文件夹中。然后,使用 `tar` 命令将文件夹压缩为 `.tar.gz` 文件。最后,删除原始文件夹。 还原脚本: ``` #!/bin/bash # MongoDB restore script # MongoDB credentials user="username" password="password" host="localhost" port="27017" db_name="database_name" # Other options backup_path="/path/to/backup/folder" filename="$db_name-$date.tar.gz" # Restore command tar -zxvf $backup_path/$filename -C $backup_path mongorestore --host=$host --port=$port --username=$user --password=$password --db=$db_name $backup_path/$db_name-$date/$db_name ``` 在还原脚本中,您需要使用与备份脚本相同的 `username`、`password`、`host` 和 `database_name` 值。`backup_path` 变量应该与备份脚本中的相同。`filename` 变量包含备份文件名,它必须与备份脚本中的相同。 还原期间,`tar` 命令将备份文件解压缩到指定的文件夹中。然后使用 `mongorestore` 命令将备份数据还原到数据库中。 请注意,这些脚本仅是示例,不适用于所有情况。在实际使用之前,请测试并根据需要进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值