mongo some-host:30000/myDB
mongoDB shell version:2.4.0
connecting to:some-host:30000/myDB
>
db现在就指向了some-host:30000的myDB数据库
使用 --nodb启动就不会连接任何数据库
> mongo --nodb
MongoDB shell version: 2.4.0
启动之后运行new Mongo(hostname)命令就可以连接到想要的数据库
> conn=new Mongo("some-host:30000")
> db=conn.getDB("myDB")
db.help()查看数据库级别的帮助,db.foo.help()查看集合级别的帮助
还可以直接在shell里面输入函数名,就可以看到函数的具体实现
db.foo.update
编写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
> load("mongo.js")
I am albert shao in the mongo.js
true
>
> load("mongo2.js")
hello:7
true
>
注意:脚本文件一定要指定具体目录,如果是放在mongoDB的bin下不用指定,其他的都要指定绝对路径
如果某些脚本会被频繁加载,可以将它们添加到.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!
>
可以使用这个脚本创建一些自己需要的全局变量,或者是为太长的名字创建一个简短的名字,也可以重写内置的函数。
.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
mongo 127.0.0.1:27017/test --eval "printjson(db.users.findOne())"
将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>
由于shell不支持跨行编辑,所以可以配置编辑器,当使用edit 命令就会跳转到指定的编辑器,编辑完成在之后保存退出。
编辑环境变量配置文件
sudo vi etc profile
在profile中加上自己喜欢的编辑器的路径
export EDITOR=/bin/vi
加上如下内容:
EDITOR="/bin/vi";
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"
}
在脚本中可以直接访问db变量以及其他的一些全局变量,但是有一些辅助函数不可以在js文件中使用,它们有对应的js函数
辅助函数 | 等价js函数 |
---|---|
use foo | db.getSisterDB(“foo”) |
show dbs | db.getMongo().getDBs() |
show collections | db.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>
test>db.getCollection("blog")
test.blog
如果集合中包含了无效的js属性名称,也可以使用这个函数。
注意:JS属性名称只能包含字母,数字,$,和_ ,而且不能使用数组开头
通过变量和数组访问子集合
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]