Mongodb的简单操作
【简介】
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
mongodb是“面向集合”的,数据被分组存储在数据集中,被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。
【基本概念】
文档:键值对的有序集,如{"age":25, "name":"John", "gender":"female"}--相当于关系型数据库里面表的行(记录,key为列,value为每一列的值)
集合:一组文档的集,--相当于关系型数据库里面的表(table)
数据库:多个文档构成的集合,--相当于关系型数据库的数据库(database)
1.对数据库的操作
#查询所有数据库
show dbs;
#查看当前所使用的数据库
db
db.getName()
#切换或创建数据库,当不存在时会自动创建,需要进行创建集合的操作之后,才会在show dbs里面显示出来
use dbname
#当前db连接的地址
db.getMongo()
#当前db的状态
db.stats()
2.对集合的操作
#创建集合
db.createCollection(“collName”, {size: 20, capped: 5, max: 100}); //{}里面的参数可选,不加表示不对容量做限制
#得到指定集合
db.getColleciton("collName")
#得到当前db所有集合的名称
db.getCollectionNames()
3.对用户的操作
#显示当前db下的所有用户
show users
#添加用户
db.addUser("name");
db.addUser("userName", "pwd123", true);
#删除用户
db.removeUser("userName")
4.集合的查询(都是指当前db)
#查询当前db下指定集合的所有文档
db.collName.find() ---联想:select * from collName;
#查询指定集合对某列去重之后的数据
db.collName.distinct("name") ---联想:select distinct name from collName;
#根据某列指定值查询
db.collName.find({"age": 25}) ---联想:select * from collName where age = 25;
#根据大于或等于查询
db.collName.find({"age": {$gt :20}}) --- age > 20
db.collName.find({"age": {$lt :20}}) --- age < 20
($gte则表示>=, $lte则表示<=)
#根据区间查询
db.collName.find({"age": {$gt :20, $lt:30}}) ---联想:select * from collName where age>20 and age<30;
#模糊匹配查询
db.collName.find({"name", /mongo/}) ---联想:select * from collName where name like '%mongo%';
db.collName.find({"name", /^mongo/}) ---联想:select * from collName where name like 'mongo%';(以……开头)
#查询指定列
db.collName.find({}, {name: 1, age: 1}); ---联想:select name, age from collName;
db.collName.find({age: {$gt: 25}}, {name: 1, age: 1}); ---联想:select name, age from collName where age > 25;(根据条件查询指定列)
#多条件查询
db.collName.find({name: 'Fanfan', age: 40}); ---联想:select * from collName where name = 'Fanfan' and age = 40;
#查询前几条
db.collName.find().limit(10)
#查询10条以后的
db.collName.find().skip(10)
#分页查询第5-10条
db.collName.find().limit(10).skip(5)
#查询结果数
db.collName.find({"age", {$lte:23}}).count() ---联想:select count(1) from collName where age <= 23
#in, or
db.collName.find({"user_id":{$in:["12345","123"]}}) ---联想: select * from collName where user_id in("12345", "123")
db.collName.find({$or: [{age: 22}, {age: 25}]}); ---联想:select * from collName where age = 22 or age = 25
($nin表示not in)
#按某列排序(-1表示降序)
db.collName.find().sort({age:1}) ---联想:select * from collName order by age (desc)
5.添加
db.collName.save({name: 'Lily', age: 25, gender: "female"});
db.collName.insert({name: 'Lily', age: 25, gender: "female"});
--联想:insert into collName(name, age, gender) values('Lily', 25, 'female');
6.修改
db.collName.update({age: 25}, {$set: {name: 'changeName'}}, false, true); ---联想:update collName set name = ‘changeName’ where age = 25;
db.collName.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true); ---联想:update collName set age = age + 50 where name = ‘Lisi’;
db.collName.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true); ---联想:update collName set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;
7.删除
db.collName.remove({age: 32}); ---联想:delete from collName where age = 32;
8.复合操作
db.collName.findAndModify({
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'a2'}, $inc: {age: 2}},
remove: true
});
db.runCommand({ findandmodify : "collName",
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'Angela'}, $inc: {age: 2}},
remove: true
});
9.加索引
#加唯一索引
db.collection.ensureIndex({"chatId":1},{unique:true})
#加联合索引
db.collection.ensureIndex({"chatId":1, "pk":1})
10.其他
1)print("Hello World") ---打印
2)for (var i = 0; i < 30; i++) {
... db.collName.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };---循环添加
3)var cursor = db.collName.find();
> while (cursor.hasNext()) {
printjson(cursor.next()); ---把集合的每条document打印成json格式的字符串
}---游标遍历
4)db.collName.find().forEach(printjson);---循环迭代
(find里面也可以加过滤条件)