六、Mongo数据库操作命令

 

 

一、数据库常用命令

二、Collection聚集集合

三、用户相关 

四、聚集集合查询 

五、索引

六、修改、添加、删除集合数据

七、语句块操作 

八、其他 

MongoDB文档常用操作

一、增删改查

二、索引:

三、固定集合(capped collection)

四、备份(mongodump)和恢复(mongorestore)

五、导入(mongoimport)和导出(mongoexport)


一、数据库常用命令

1、Help查看命令提示

 
  1. help

  2. db.help();

  3. db.yourColl.help();

  4. db.youColl.find().help();

  5. rs.help();


2、切换/创建数据库

 

use yourDB; 

 

当创建一个集合(table)的时候会自动创建当前数据库

 

3、查询所有数据库

show dbs;


4、删除当前使用数据库

db.dropDatabase();


5、从指定主机上克隆数据库

 

db.cloneDatabase(“127.0.0.1”); 

 

将指定机器上的数据库的数据克隆到当前数据库


6、从指定的机器上复制指定数据库数据到某个数据库

 

db.copyDatabase("mydb", "temp", "127.0.0.1");

 

将本机的mydb的数据复制到temp数据库中


7、修复当前数据库

db.repairDatabase();


8、查看当前使用的数据库

db.getName();

db; db和getName方法是一样的效果,都可以查询当前使用的数据库

9、显示当前db状态

db.stats();


10、当前db版本

db.version();


11、查看当前db的链接机器地址

db.getMongo();

 

二、Collection聚集集合

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

 

db.createCollection(“collName”, {size: 20, capped: 5, max: 100});

//创建成功会显示{“ok”:1}

 

//判断集合是否为定容量db.collName.isCapped();

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

db.getCollection("account");


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

db.getCollectionNames();


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

db.printCollectionStats();

 

三、用户相关 

1、添加一个用户

 
  1. db.addUser("name");

  2. db.addUser("userName", "pwd123", true);

添加用户、设置密码、是否只读


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

db.auth("userName", "123123");


3、显示当前所有用户

show users;


4、删除用户

db.removeUser("userName");

 

四、聚集集合查询 

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 = 22的记录

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

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

4、查询age > 22的记录

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

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

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中包含 mongo的数据

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

//相当于%%
select * from userInfo where name like ‘%mongo%';

10、查询name中以mongo开头的

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

相当于:select * from userInfo where name like ‘mongo%';

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、按照年龄排序

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

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


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

db.userInfo.find({name: 'zhangsan', age: 22});

相当于:select * from userInfo where name = ‘zhangsan' and age = ‘22';

15、查询前5条数据

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

相当于:selecttop 5 * from userInfo;

16、查询10条以后的数据

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

相当于: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: 22}, {age: 25}]});

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

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 >= 20;

21、按照某列进行排序

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

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

五、索引

1、创建索引

 
  1. db.userInfo.ensureIndex({name: 1});

  2. db.userInfo.ensureIndex({name: 1, ts: -1});


2、查询当前聚集集合所有索引

db.userInfo.getIndexes();


3、查看总索引记录大小

db.userInfo.totalIndexSize();


4、读取当前集合的所有index信息

db.users.reIndex();


5、删除指定索引
db.users.dropIndex("name_1");

6、删除所有索引索引

db.users.dropIndexes();

 

六、修改、添加、删除集合数据

1、添加

db.users.save({name: ‘zhangsan', age: 25, sex: true});

添加的数据的数据列,没有固定,根据添加的数据为准

 

2、修改

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

  2. 相当于:update users set name = ‘changeName' where age = 25;

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

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

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

  6. 相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';


3、删除

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


4、查询修改删除

 
  1. db.users.findAndModify({

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

  3. sort: {age: -1},

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

  5. remove: true

  6. });

  7. db.runCommand({ findandmodify : "users",

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

  9. sort: {age: -1},

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

  11. remove: true

  12. });


update 或 remove 其中一个是必须的参数; 其他参数可选。
参数    详解     默认值 
query    查询过滤条件    {} 

sort    如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作    {} 

remove    若为true,被选中对象将在返回前被删除 N/A 

update    一个修改器对象 N/A 

new    若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。 false 

fields    参见Retrieving a Subset of Fields (1.5.0+) All fields 

upsert    创建新对象若查询结果为空。 示例 (1.5.4+) false 

 

七、语句块操作 

1、简单Hello World

print("Hello World!");

这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;

 

2、将一个对象转换成json

 
  1. tojson(new Object());

  2. tojson(new Object('a'));


3、循环添加数据

 
  1. > for (var i = 0; i < 30; i++) {

  2. ... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});

  3. ... };

这样就循环添加了30条数据,同样也可以省略括号的写法
复制代码 代码如下:
> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});

也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;

 

4、find 游标查询

 
  1. >var cursor = db.users.find();

  2. > while (cursor.hasNext()) {

  3. printjson(cursor.next());

  4. }

这样就查询所有的users信息,同样可以这样写

 
  1. var cursor = db.users.find();

  2. while (cursor.hasNext()) { printjson(cursor.next); }

同样可以省略{}号

 

5、forEach迭代循环

db.users.find().forEach(printjson);

forEach中必须传递一个函数来处理每条迭代的数据信息。

 

6、将find游标当数组处理

 
  1. var cursor = db.users.find();

  2. cursor[4];

取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据

for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);


7、将find游标转换成数组

 
  1. > var arr = db.users.find().toArray();

  2. > printjson(arr[2]);

用toArray方法将其转换为数组。

 

8、定制我们自己的查询结果

只显示age <= 28的并且只显示age这列数据

 
  1. db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);

  2. db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);

排除age的列

db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);

 

9、forEach传递函数显示信息

db.things.find({x:4}).forEach(function(x) {print(tojson(x));});

 

八、其他 

1、查询之前的错误信息

db.getPrevError();


2、清除错误记录

db.resetError();

查看聚集集合基本信息
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. show dbs:显示数据库列表

  2. show collections:显示当前数据库中的集合(类似关系数据库中的表)

  3. show users:显示用户

  4. use :切换当前数据库,这和MS-SQL里面的意思一样

  5. db.help():显示数据库操作命令,里面有很多的命令

  6. db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令

  7. db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)

  8. db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

    MongoDB文档常用操作

    一、增删改查

    查看当前数据库中所有的集合,使用命令

    show collections  或使用
    show tables
    

    创建集合有两种方式,显示创建和隐式创建

    显示创建可以使用命令 db.createCollection(“集合名称")
    隐式创建可以使用命令 db.集合名称.insert({}),
    指创建集合并同时向集合中插入数据,
    例如:db.customer.insert({name:”jack”})
    

    向集合添加文档

    使用命令 db.集合名称.insert({}),例如:
    db.user1.insert({name:”jack”,age:20})
    

    删除集合中的文档

    使用命令 db.集合名称.remove({删除条件}),
    不加删除条件为删除集合中的所有文档:
    例如,删除c1集合中的所有文档 db.c1.remove() 
    删除c1集合中name为user1的文档 db.c1.remove({name:”user1”})
    

    查询集合中的文档

    db.集合名称.find({条件})
    或者使用 
    db.集合名称.findOne() 查询第一个文档
    

    查询集合中的文档,返回某些特定的键值

    除了查询表达式以外,MongoDB还支持一些额外的参数选项。
    如果仅仅只想返回某些特定的字段值:
    返回除了age字段外的所有字段
    db.user.find({},{age:0});
    
    返回tags=tennis除了comments的所有列
    db.posts.find({tags:'tennis'},{comments:0});
    
    返回userid=16的name字段
    db.user.find({userid:16},{name:1});
    {"_id":16,"name":"user16"}
    
    返回x=john的所有z字段
    db.things.find({x:"john"},{z:1});
    

    查询集合中的文档 ,使用条件表达式(<, <=, >, >=,!=)

    //大于: field > value
    db.collection.find({field:{$gt:value}});
    
    //小于: field < value
    db.collection.find({field:{$lt:value}});
    
    //大于等于: field >= value
    db.collection.find({field:{$gte:value}});
    
    //小于等于: field <= value
    db.collection.find({field:{$lte:value}});
    
    //不等于:  field != value
    db.collection.find({field:{$ne:value}});
    

    查询集合中的文档 ,统计(count)、排序(sort)、分页(skip、limit)

    db.customer.count();
    db.customer.find().count();
    db.customer.find({age:{$lt:5}}).count();
    db.customer.find().sort({age:1}); 降序-1
    db.customer.find().skip(2).limit(3);
    db.customer.find().sort({age:-1}).skip(2).limit(3);
    db.customer.find().sort({age:-1}).skip(2).limit(3).count();
    db.customer.find().sort({age:-1}).skip(2).limit(3).count(0);
    db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);
    

    查询集合中的文档

    $all主要用来查询数组中的包含关系,
    查询条件中只要有一个不包含就不返回
    
    $in,类似于关系型数据库中的IN
    
    $nin,与$in相反
    
    $or,相当于关系型数据库中的OR,表示或者的关系,
    例如查询name为user2或者age为3的文档,命令为:
    db.customer.find({$or:[{name:”user2”},{age:3}]})
    
    $nor,表示根据条件过滤掉某些数据,例如查询name不是user2,age不是3的文档,命令为:
    db.customer.find({$nor:[{name:”user2”},{age:3}]})
    
    $exists,用于查询集合中存在某个键的文档或不存在某个键的文档,例如查询customer集合中存在name键的所有文档,可以使用 
    db.customer.find({name:{$exists:1}})
    $exists:1表示真,指存在
    $exists:0表示假,指不存在
    

    游标

    更新集合中的文档

    语法:db.collection.update(criteria,objNew,upsert,multi)
    参数说明:
    criteria:用于设置查询条件的对象
    objNew:用于设置更新内容的对象
    upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
    multi:如果有多个符合条件的记录,是否全部更新,取值为0或1
    
    注意:默认情况下,只会更新第一个符合条件的记录
    一般情况下后两个参数分别为0,1 ,即:
    db.collection.update(criteria,objNew,0,1)
    
    将集合中name为user1的文档改成name为jack:
    db.c1.update({name:"user1"},{name:"jack"})
    
    $set 用来指定一个键的值,如果这个键不存在,则创建它。例如:
    给name为user1的文档添加address,可以使用命令:
    db.c1.update({name:”user1”},{$set:{address:”bj”}},0,1)
    将name为user1的文档修改address为tj,其它键值对不变,命令为:
    db.c1.update({name:”user1”},{$set:{address:”tj”}},0,1)
    
    使用 $inc 将集合中name为user1的age加1,其它键不变, 
    $inc表示使某个键值加减指定的数值
    db.c1.update({name:"user1"},{$inc:{age:1}})
    
    $unset 用来删除某个键
    例如删除name为user1的文档中的address键,可以使用命令:
    db.c1.update({name:”user1”},{$unset:{address:1}},0,1)
    

    二、索引:

    索引就是用来加速查询的。数据库索引与书籍的索引类似:有了索引就不需要翻遍整本书,数据库则可以直接在索引中查找,使得查找速度能提高几个数量级。在索引中找到条目以后,就可以直接跳转到目标文档的位置。

    普通索引:

    创建:db.collection.ensureIndex({key:1})
    查看关于索引的相关信息:db.collection.stats()
    查看查询使用索引的情况:db.collection.find({key:value}).explain()
    删除索引:db.collection.dropIndex({key:1})
    删除集合,也会将集合中的索引全部删除
    

    唯一索引:

    创建:db.collection.ensureIndex({key:1},{unique:true})
    查看关于索引的相关信息:db.collection.stats()
    查看查询使用索引的情况:db.collection.find({key:value}).explain()
    删除索引:db.collection.dropIndex({key:1})
    删除集合,也会将集合中的索引全部删除
    

    三、固定集合(capped collection)

    固定集合指的是事先创建而且大小固定的集合 。

    固定集合特性:固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制。

    创建固定集合:

    db.createCollection(“collectionName”,{capped:true,size:100000,max:100});  
    size指定集合大小,单位为KB,max指定文档的数量 
    

    当指定文档数量上限时,必须同时指定大小。淘汰机制只有在容量还没有满时才会依据文档数量来工作。要是容量满了,淘汰机制会依据容量来工作。

    四、备份(mongodump)和恢复(mongorestore)

    MongoDB提供了备份和恢复的功能,分别是MongoDB下载目录下的mongodump.exe和mongorestore.exe文件(即在mongodb bin目录下的命令)

    备份数据使用下面的命令:

    mongodump -h dbhost -d dbname -o dbdirectory
    -h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
    -d:需要备份的数据库实例,例如:test
    -o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提
    前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个
    目录里面存放该数据库实例的备份数据。
    

    恢复数据使用下面的命令:

    mongorestore -h dbhost -d dbname -directoryperdb dbdirectory
    -h:MongoDB所在服务器地址
    -d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
    -directoryperdb:备份数据所在位置,例如:c:\data\dump\test
    

    五、导入(mongoimport)和导出(mongoexport)

    导出数据可以使用命令:

    mongoexport -h dbhost -d dbname -c collectionName -o output
    参数说明:
    -h  数据库地址
    -d 指明使用的库
    -c 指明要导出的集合
    -o 指明要导出的文件名
    
    例:
    mongoexport -h localhost:27017 -d test -c c4 -o d:/beifeng/c4.txt
    

    导入数据可以使用命令:

    mongoimport -h dbhost -d dbname -c collectionname 文件的地址...
    参数说明:
    -h  数据库地址
    -d 指明使用的库
    -c 指明要导入的集合
    本地的文件地址...
    
    例:
    mongoimport -h localhost:27017 -d test -c cctv d:/beifeng/c4.txt

     

你可能感兴趣的:(ES+MQ+MONGO)