MongoDB--shell以及脚本文件的使用

MongoDB–shell的使用

一:shell连接到指定机器

1.启动前指定端口
mongo some-host:30000/myDB
mongoDB shell version:2.4.0
connecting to:some-host:30000/myDB
>

db现在就指向了some-host:30000的myDB数据库

2.启动后指定

使用 --nodb启动就不会连接任何数据库

> mongo --nodb
MongoDB shell version: 2.4.0

启动之后运行new Mongo(hostname)命令就可以连接到想要的数据库

> conn=new Mongo("some-host:30000")
> db=conn.getDB("myDB")

二:help

db.help()查看数据库级别的帮助,db.foo.help()查看集合级别的帮助

还可以直接在shell里面输入函数名,就可以看到函数的具体实现

db.foo.update

三:使用shell执行脚本

1.不进入shell客户端

编写js脚本文件mong.js

sudo vi mongo.js
加上如下内容:
print("I am albert shao in the mongo.js") 

编写js脚本文件mongo2.js

sudo vi mongo1.js
加上如下内容:
var a=1;
var b=7;
print("hello:"+a*b)

执行脚本文件

[hadoop@hadoop01 bin]$ mongo --quiet mongo.js
I am albert shao in the mongo.js

[hadoop@hadoop01 bin]$ mongo --quiet mongo2.js
hello:7
2.进入shell客户端使用load()函数
> load("mongo.js")
I am albert shao in the mongo.js
true
> 


> load("mongo2.js")
hello:7
true
> 

注意:脚本文件一定要指定具体目录,如果是放在mongoDB的bin下不用指定,其他的都要指定绝对路径

3.创建.mongorc.js文件
3.1 示例

如果某些脚本会被频繁加载,可以将它们添加到.mongorc.js中,在启动shell的时候会自动去加载.mongorc.js

#创建一个.mongorc.js文件
sudo vi .mongorc.js
#添加以下的内容
var compliment = ["like albert","attractive","intellgient"];  
var index = Math.floor(Math.random()*3);  
print("Hello, you're looking particularly " + compliment[index] + "  today!");
#移动到主目录下,windows是移动到admin
mv .mongorc.js ~

每次启动shell的时候会去自动加载.mongorc.js

[hadoop@hadoop01 bin]$ mongo -quiet
Hello, you're looking particularly intellgient  today!
> 
3.2 实际应用场景

可以使用这个脚本创建一些自己需要的全局变量,或者是为太长的名字创建一个简短的名字,也可以重写内置的函数。

.mongoorc.js最常见的用途是"禁止"比较危险的shell辅助函数

var no =function(){
print("不要删除数据!!!!");
};
//禁止删除数据库
db.dropDatabase=DB.prototype.dropDatabase = no;
//禁止删除集合
DBCollection.prototype.drop=no;
//禁止删除索引
DBCollection.prototype.dropIndex=no;

加载之后在删除数据,会有以下提示

> show dbs
admin   0.000GB
config  0.000GB
cqsm    0.000GB
local   0.000GB
test    0.000GB
> db.dropDatabase("cqsm")
不要删除数据!!!!
> 

如果试图调用这些函数就会的到错误提示,避免自己手误.

可以在启动的时候指定–norc参数,就可以禁止加载.mongorc.js

mongo --norc
4.mongo --eval 运行一段脚本
mongo 127.0.0.1:27017/test --eval "printjson(db.users.findOne())"
5.定制shell提示

将prompt变量设置为一个字符串或者是函数,就可以重写默认的shell提示。

定制提示实现shell提示出输出当前的时间,这样就可以知道最后一个操作完成的时间了。

prompt = function(){
	return (new Date()+">");	
};

还可以显示当前使用的数据库

prompt = function(){
	if(typeof db=='undefined'){
		return '(nodb)>';
	}
	//检查最后的数据库操作
    try{
    	db.runCommand({getLastError:1});
    }
    catch (e) {
    	print(e);
    }
    return db+">";
};

runCommand模糊查询的作用,getLastError可以捕获数据库最后一次错误

重新连接客户端之后:就可以显示当前属于哪个数据库了

test>use cqsm
switched to db cqsm
cqsm>
6.设置EDITOP,编辑复合变量

由于shell不支持跨行编辑,所以可以配置编辑器,当使用edit 命令就会跳转到指定的编辑器,编辑完成在之后保存退出。

6.1 在环境变量中配置EDITOR路径
编辑环境变量配置文件
sudo vi etc profile
在profile中加上自己喜欢的编辑器的路径
export EDITOR=/bin/vi
6.2 mongo的shell自启动文件.mongorc.js配置
加上如下内容:
EDITOR="/bin/vi";
6.3 使用
test>var wap=db.blog.findOne()
test>edit wap
{
        "_id" : ObjectId("5dd65a99a8831f1e3fedb52a"),
        "title" : "aaa",
        "name" : "zs"
}
修改完保存退出,再查看

test>wap
{
        "_id" : ObjectId("5dd65a99a8831f1e3fedb52a"),
        "title" : "aaa",
        "name" : "zs",
        "sex" : "n"
}
7.辅助函数

在脚本中可以直接访问db变量以及其他的一些全局变量,但是有一些辅助函数不可以在js文件中使用,它们有对应的js函数

辅助函数等价js函数
use foodb.getSisterDB(“foo”)
show dbsdb.getMongo().getDBs()
show collectionsdb.getCollectionNames()

可以使用脚本将变量注入到shell,初始化一些函数,加载之后直接在shell中调用。如下定义的函数可以连接到一个指定的本地数据库,并且将db指向这个连接

在linux主目录~下建立一个shell脚本文件
sudo vi defineConnectTo.js
var connecttTo = function(port,dbname) {
	if(!port){
		port=27017;
	}
	if(!dbname){
		dbname="test";
	}
	db=connect("localhost:"+port+"/"+dbname);
};

在shell中加载这个脚本文件

test>typeof connecttTo
undefined
test>load('defineConnectTo.js')
true
test>typeof connecttTo
function
test>connecttTo
function (port,dbname) {
        if(!port){
                port=27017;
        }
        if(!dbname){
                dbname="test";
        }
        db=connect("localhost:"+port+"/"+dbname);
}
test>

四:对集合的访问

1.使用getCollection函数
test>db.getCollection("blog")
test.blog

如果集合中包含了无效的js属性名称,也可以使用这个函数。

注意:JS属性名称只能包含字母,数字,$,和_ ,而且不能使用数组开头

2.通过数组访问子集合

通过变量和数组访问子集合

var collection = ["post","comments","authrs"];
for(var i in collections){
	print(db.blog[collections[i]]);
}

而不用这样:

print(db.blog.post);
print(db.blog.comments);
print(db.blog.authrs);

注意:不能使用db.blog.i,只能使用db.blog[i]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值