所有MongoDB的方法都使用首字母小写的驼峰式写法。
1.show dbs,查看存在数据库命令,默认有local、admin(config),这是MongoDB的默认数据库,我们在新建库时是不允许起这些名称;
2.db.version(),查看数据库版本命令;
3.use admin: 进入数据库,也可以理解成为使用数据库。成功显示:switched to db admin;
4.use db(建立数据库):use不仅可以进入一个数据库,如果你敲入的库不存在,它还可以帮你建立一个库。但是在没有集合前,它还是默认为空。
5.show collections: 显示数据库中的集合(关系型中叫表);
6.db:显示当前位置,显示当前使用的数据库名称;
7.db.集合.insert( ):新建数据集合和插入文件(数据),当集合没有时,这时候就可以新建一个集合,并向里边插入数据。
Demo:db.集合名.insert({“name”:”name1”});
批量插入数据:用数组插入效率高
var tempArray = [] //声明一个数组
for(let i=0;i<1000;i++){ //循环向数组中放入值
tempArray.push({num:i});
}
db.集合名.insert(tempArray)
8.db.集合.find( ):查询所有数据,这条命令会列出集合下的所有数据,可以看到MongoDB是自动给我们加入了索引值的。
Demo:db.集合名.find();
9.db.集合.findOne( ):查询第一个文件数据;
db.集合.update({查询},{修改}):修改文件数据,第一个是查询条件,第二个是要修改成的值。可以多加文件数据项;
Demo:db.集合名.update({"name":"name1"},{"name":"name2","age":"2"});
10.db.集合.remove(条件):删除文件数据,注意的是要跟一个条件。
Demo:db.集合名.remove({“name”:”name1”})
11.db.集合.drop( ):删除整个集合,这个在实际工作中一定要谨慎使用,如果是程序,一定要二次确认。
12.db.dropDatabase( ):删除整个数据库,在删除库时,一定要先进入数据库,然后再删除。
用js文件写mongo命令:
var userName="yyy"; //声明一个登录名
var timeStamp=Date.parse(new Date()); //声明登录时的时间戳
var jsonDdatabase={"loginUnser":userName,"loginTime":timeStamp}; //组成JSON字符串
var db = connect('log'); //链接数据库
db.集合名.insert(jsonDdatabase); //插入数据
print('[demo]log print success'); //没有错误显示成功
修改器
$set修改器:用来修改一个指定的键值(key);
Demo: db.集合名.update({"name":"something"},{"$set":{sex:0,age:21}});
修改嵌套内容(内嵌文档):同对象取值
Demo: db.集合名.update({"name":"something"},{"$set":{"skill.skillThree":'PHP'}})
$unset用于将key删除
Demo: db.集合名.update({"name":"something"},{$unset:{"age":''}});
$inc对数字进行计算:对value值的修改,修改的必须是数字,字符串无效。
Demo: db.集合名.update({"name":"something"},{$inc:{"age":-2}})
multi选项
multi有ture和false两个值,true代表全部修改,false代表只修改一个(默认值)
Demo: db.集合名.update({},{$set:{interset:[]}},{multi:true});
upsert选项
upsert在找不到数据的情况下,直接插入。upsert有两个值:true代表没有就添加,false代表没有不添加(默认值)。
db.集合名.update({name:'xiaoWang'},{$set:{age:20}},{upsert:true})
** $push追加数组/内嵌文档值**
$push的功能是追加数组中的值,经常用它操作内嵌稳文档,就是{}对象型的值。
db.集合名.update({name:'xiaoWang'},{$push:{interest:'sing'}});//新增
$addToSet:检查一个值是否存在,如果不存在再执行操作,存在就不执行
db.集合名.update({name:"xiaoWang"},{$addToSet:{interest:"readBook"}})
$each 批量追加
var newInterset=["Sing","Dance","Code"];
db.集合名.update({name:"xiaoWang"},{$addToSet:{interest:{$each:newInterset}}})
$pop 删除数组值
$pop只删除一次,并不是删除所有数组中的值。而且它有两个选项,一个是1和-1。
1:从数组末端进行删除
-1:从数组开端进行删除
db.集合名.update({name:'xiaoWang'},{$pop:{interest:1}});
db.集合名.update({name:'xiaoWang'},{$pop:{interest:-1}});
数组定位修改
index从0开始
db.集合名.update({name:'xiaoWang'},{$set:{"interset.1":"Code"}});
db.runCommand( ):
数据库运行命令的执行器,执行命令首选就要使用它,它在Shell和驱动程序间提供了一致的接口。
db.集合名.update({sex:1},{$set:{money:1000}},false,true)
var resultMessage=db.runCommand({getLastError:1})
printjson(resultMessage);
常用参数:
false:第一句末尾的false是upsert的简写,代表没有此条数据时不增加;
true:true是multi的简写,代表修改所有,这两个我们在前边课程已经学过。
getLastError:1 :表示返回功能错误,这里的参数很多。。。
printjson:表示以json对象的格式输出到控制台。
db.listCommands( ):查看所有的Commad命令。
:findAndModify
属性值:
query:需要查询的条件/文档
sort: 进行排序
remove:[boolean]是否删除查找到的文档,值填写true,可以删除。
new:[boolean]返回更新前的文档还是更新后的文档。
fields:需要返回的字段
upsert:没有这个值是否增加。
索引
建立索引:eg:db.集合名.ensureIndex({username:1});
查看现有索引:db.集合名.getIndexes();
复合索引:
eg:var rs= db.集合名.find({username:'7xwb8y3',randNum0:565509});
rs.forEach(rs=>{printjson(rs)});
指定索引查询(hint)
eg:var rs= db.集合名.find({username:'7xwb8y3',randNum0:565509}).hint({randNum0:1});
删除索引:
eg:db.集合名.dropIndex('randNum0_1');//索引的唯一ID
全文索引:
两个关键修饰符:
$text:表示要在全文索引中查东西。
$search:后边跟查找的内容。
eg:db.集合名.find({$text:{$search:"programmer"}})
** 查找多个词 **
全文索引是支持多个次查找的,比如我们希望查找数据中有programmer,family,diary,drink的数据(这是或的关系),所以两条数据都会出现。
eg:
db.集合名.find({$text:{$search:"programmer family diary drink"}})
使用“-”减号来取消
db.集合名.find({$text:{$search:"programmer family diary -drink"}})
转移符:
eg:搜索的是两个词(love PlayGame和drink),这时候需要使用\斜杠来转意
db.info.find({$text:{$search:"\"love PlayGame\" drink"}});
管理:用户的创建、删除与修改
一、创建用户可以用db.createUser方法
db.createUser({
user:"XXX",
pwd:"123456",
customData:{
name:'xxx',
email:'[email protected]',
age:18,
},
roles:[ //compay数据库的权限为读写
{
role:"readWrite",
db:"company"
},
'read'
]
})
内置角色:
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManage;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
内部角色:__system
查找用户信息:db.集合名.users.find();
删除用户:db.集合名.users.remove({user:“xxx”});
建权:验证用户的用户名密码是否正确,就需要用到MongoDB提供的健全操作
db.auth(“xxx”,“123456”)
如果正确返回1,如果错误返回0。(Error:Authentication failed。)
启动建权:重启MongoDB服务器,然后设置必须使用建权登录。
mongod --auth
启动后,用户登录只能用用户名和密码进行登录,原来的mongo形式链接已经不起作用了。相应的用户权限也对应妥当。项目中我们启动服务器必须使用建权形式。
建权之后登陆:mongom -u 用户名 -p 密码 127.0.0.1:27017/admin
管理:备份和还原
mongodump备份的基本格式。
mongodump
--host 127.0.0.1
--port 27017
--out D:/databack/backup
--collection myCollections
--db test
--username username
--password password
还原:mongorestore
mongorestore
--host 127.0.0.1
--port 27017
--username username
--password password
<path to the backup>