MongoDB入门教程(三)之常用命令

一、Collection聚集集合

1、创建一个聚集集合(table)

db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>} )

  • name:集合的名字
  • capped:是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义
  • size:限制集合使用空间的大小,默认为没有限制
  • max:集合中最大条数限制,默认为没有限制
  • autoIndexId:是否使用_id作为索引,默认为使用(true或false)
  • size的优先级比max要高
db.createCollection("list",{size:20,capped:5,max:100})

常用方法介绍:

  1. 一般来说,我们创建集合用db.createCollection(name),如:db.createCollection("log"),创建一个名字为log的集合,没有任何的大小,数量限制,使用_id作为默认索引;
  2. 限制集合空间的大小:db.createCollection("log",{size:1024})或db.createCollection("log",{capped:true,size:1024}),创建一个名字为log集合,限制它的空间大小为1M,如果超过1M的大小,则会删除最早的记录;
  3. 限制集合的最大条数:db.createCollection("log",{max:1024}),创建一个名字为log集合,最大条数为1024条,超过1024再插入数据的话会删除最早的一条记录。这个不能使用capped:true,否则会报错;
  4. 即限制最大条数有限制使用空间大小:db.createCollection("log",{size:1024,max:1024})或db.createCollection("log",{capped:true,size:1024,max:1024}),限制集合最大使用空间为1M,最大条数为1024条

2、得到指定名称的聚集集合(table)

 db.getCollection("account");

3、得到当前db的所有聚集集合

 db.getCollectionNames();

4、显示当前db所有聚集索引的状态

 db.printCollectionStats();

 

二、用户相关

1、添加一个用户

 创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误。

语法:
db.createUser(user, writeConcern)
    user这个文档创建关于用户的身份认证和访问信息;
    writeConcern这个文档描述保证MongoDB提供写操作的成功报告。

user文档,定义了用户的以下形式:


{ user: "<name>",

  pwd: "<cleartext password>",

  customData: { <any information> },

  roles: [

    { role: "<role>", db: "<database>" } | "<role>",

    ...

  ]

}

user文档字段介绍:
    user字段,为新用户的名字;
    pwd字段,用户的密码;
    cusomData字段,为任意内容,例如可以为用户全名介绍;
    roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;
    在roles字段,可以指定内置角色和用户定义的角色。  

 Built-In Roles(内置角色):    

1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root      // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system  

writeConcern文档(官方说明)    

w选项:允许的值分别是 1、0、大于1的值、"majority"、<tag set>;
j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。
 

例如:在demo数据库创建用户demo,并给该用户demo数据库上readWrite.

db.createUser({
	user: 'demo',
	pwd: '123456',
	roles: [{
		role: 'readWrite',
		db: 'demo'
	}]
})

2、数据库认证、安全模式

 db.auth(用户名, 密码);

3、显示当前所有用户

 show users;

4、删除用户

 db.removeUser("userName");

三、添加

db.集合名.insert()

 db.list.insert({name:'Tom',sex:'man',age:20})

db.集合名.inserMany() 批量插入数据

db.list.insertMany([
    {name:'Tom',sex:'man',age:20},
    {name:'Jim',sex:'man',age:23},
    {name:'Drive',sex:'man',age:50},
    {name:'Zacl',sex:'woman',age:20},
    {name:'JiJy',sex:'man',age:12},
    {name:'Tis',sex:'man',age:23},
    {name:'YuLi',sex:'man',age:43},
    {name:'Lucy',sex:'woman',age:32},
    {name:'KiLu',sex:'man',age:56},
    {name:'Licy',sex:'man',age:46},
    {name:'TiLi',sex:'woman',age:42},
    {name:'Jim',sex:'man',age:20},
    {name:'Tom',sex:'woman',age:20}
])

db.集合名.save(),插入数据

save()与insert()的区别

都是插入数据:

1.对于数据库中没有改字段,两者没有区别

2.对于数据库中有该字段,insert会报错,save会执行更新操作

若新增的数据中存在主键 ,insert() 会提示错误,而save() 则更改原来的内容为新内容。

四、查看聚集集合基本信息

1、查看帮助  db.yourColl.help();

2、查询当前集合的数据条数  db.yourColl.count();

3、查看数据空间大小 db.userInfo.dataSize();

4、得到当前聚集集合所在的db db.userInfo.getDB();

5、得到当前聚集的状态 db.userInfo.stats();

6、得到聚集集合总大小 db.userInfo.totalSize();

7、聚集集合储存空间大小 db.userInfo.storageSize();

8、Shard版本信息  db.userInfo.getShardVersion()

9、聚集集合重命名 db.userInfo.renameCollection("users"); 将userInfo重命名为users

10、删除当前聚集集合 db.userInfo.drop();

五、聚集集合查询

1、查询所有记录

db.userInfo.find(); 相当于:select* from userInfo;

默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”

但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。

2、查询去掉后的当前聚集集合中的某列的重复数据

db.userInfo.distinct("name");

会过滤掉name中的相同数据

相当于:select distict name from userInfo;

3、查询age = 20的记录

db.userInfo.find({"age": 20});

相当于: select * from userInfo where age = 20;

4、查询age > 20的记录

db.userInfo.find({age: {$gt: 20}});

相当于:select * from userInfo where age >20;

5、查询age < 22的记录

db.userInfo.find({age: {$lt: 22}});

相当于:select * from userInfo where age <22;

6、查询age >= 25的记录

db.userInfo.find({age: {$gte: 25}});

相当于:select * from userInfo where age >= 25;

7、查询age <= 25的记录

db.userInfo.find({age: {$lte: 25}});

8、查询age >= 23 并且 age <= 26

db.userInfo.find({age: {$gte: 23, $lte: 26}});

9、查询name中包含 To的数据

db.userInfo.find({name: /To/});

//相当于%%

select * from userInfo where name like ‘%To%’;

10、查询name中以T开头的

db.userInfo.find({name: /^T/});

select * from userInfo where name like ‘T%’;

11、查询指定列name、age数据

db.userInfo.find({}, {name: 1, age: 1});

相当于:select name, age from userInfo;

当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。

12、查询指定列name、age数据, age > 25

db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});

相当于:select name, age from userInfo where age >25;

13、按照年龄排序

升序:db.userInfo.find().sort({age: 1});

降序:db.userInfo.find().sort({age: -1});

14、查询name = Lucy, age > 22的数据

db.userInfo.find({name: 'Lucy', age:{$gt:22}});

相当于:select * from userInfo where name = ‘Lucy’ and age > ‘22’;

15、查询前5条数据

db.userInfo.find().limit(5);

相当于:select top 5 * from userInfo;

16、查询10条以后的数据

db.userInfo.find().skip(10);注意skip()想到与跳过多少条数据

相当于:select * from userInfo where id not in (

                            selecttop 10 * from userInfo

               );

17、查询在5-10之间的数据

db.userInfo.find().limit(10).skip(5);

可用于分页,limit是pageSize,skip是第几页*pageSize

18、or与 查询

db.userInfo.find({$or: [{age: 20}, {age: 42}]});

相当于:select * from userInfo where age = 20 or age = 42;

19、查询第一条数据

db.userInfo.findOne();

相当于:selecttop 1 * from userInfo;

db.userInfo.find().limit(1);

20、查询某个结果集的记录条数

db.userInfo.find({age: {$gte: 25}}).count();

相当于:select count(*) from userInfo where age >= 25;

如果要返回限制之后的记录数量,要使用count(true)或者count(非0) 
db.users.find().skip(10).limit(5).count(true);

21、按照某列进行排序

db.userInfo.find({sex: {$exists: true}}).count();

相当于:select count(sex) from userInfo;

六、修改、删除集合数据

db.collection.update(criteria, objNew, upsert, multi )

  • criteria:update的查询条件,类似sql update查询内where后面的
  • objNew:update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的。
  • upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

将age=25的name值全部改为lisi

db.users.update({age: 25}, {$set: {name: 'lisi'}}, false, true);

相当于:update users set name = ‘lisi’ where age = 25;

将所有的name=lisi的age加50

db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);

相当于:update users set age = age + 50 where name = ‘Lisi’;

将所有name=lisi的age加5,name更新为Tom

db.users.update({name: 'Lisi'}, {$inc: {age: 5}, $set: {name: 'Tom'}}, false, true);

相当于:update users set age = age + 5, name = ‘Tom’ where name = ‘Lisi’;

3、删除

db.users.remove({age: 75}); 

相当于 delete from users where age=75

4、查询修改删除

db.users.findAndModify({

    query: {age: {$gte: 25}}, 

    sort: {age: -1}, 

    update: {$set: {name: 'a2'}, $inc: {age: 2}},

    remove: true

});

 

db.runCommand({ findandmodify : "users", 

    query: {age: {$gte: 25}}, 

    sort: {age: -1}, 

    update: {$set: {name: 'a2'}, $inc: {age: 2}},

    remove: true

});

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值