学习笔记:
1.数据逻辑结构:MongoDB的文档相当于关系数据库的行,集合相当于表,数据库相当于MongoDB数据库。
2.MongoDB内部,每个数据库都包含一个NS文件和一些数据文件,例如有一个silie的数据库,就有silei.ns,silei.0,silei.1,等一系列的文件。
3.日志系统:系统日志(启动MongoDB的时候指定一个logpath参数即可,mongod -logpath=/data/db/log/serverlog.log -logappend),Journal系统(mongod -journal),oplog主从日志(mongod - oplogSize=1024),慢查询日志(mongod --profile=1 --slowns=5)。
4.Ctrl+c可以停止数据库,或者使用db.shutdownServer()。
在退出后,需要在第一个CMD窗口中重新输入mongod --dbpath c:\db才可以再次进入Mongo连接数据库。
5.插入记录
查询数据
注意:1.不要预先创建一个集合,在第一次插入数据的时候会自动创建。
2.在文档中可以存储任何结构的数据,但是在实际应用中存储的还是相同类型的文 档的集合。
3.每次插入一个数据的时候都会有一个ID。
循环插入数据
如果还有没有查看到的信息,只需要输入it 就可以继续查看剩下的数据了。
6.MongoDB主要是支持分布式系统,不支持自增主键。
7.每一个集合都有一个ID字段,字段默认类型是ObjectId,也可以不是ObjectId,但是在同一个集合中必须唯一。
8.普通查询
JAVA SHELL查询
把游标转换成真实的数组类型
条件查询
9.findOne()语法,MongoDB SHELL为了避免游标带来的开销,提供了一个findOne()函数,这个函数和find()一样,但是它返回的是游标里的第一条数据,或者返回NULL。
10.通过limit限制结果集的数量
11.修改记录
12.删除记录
13.条件操作符
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
14.$all匹配所有
db.user.find({age:{$all:[6,8]}});
满足括号内的所有值才可以。
15.$exit判断字段是否存在
db.user.find({age:{$exit:true}});
db.user.find({age:{$exit:false}});
16.$mod取模运算
例如取模查询age取模10等于1的数据,db.student.find({age:{$mod:[10,1]}});
17.$ne不等于
db.student.find({age:{$ne:20}});
18.$in包含
查询在某一范围内的数据db.student.find({age:{$in:[5,7,9]}});
19.$nin不包含
db.student.find({age:{$nin:[5,7,9]}});
20.$size匹配数组元素的个数
db.student.find({age:{$size:4}});
21.count查询记录条数
db.users.find().count();
返回限制之后的的记录数量,要用count(true)或者是count(!0)才可以。
db.things.find().limit(5).count(true);
db.things.count(); //返回的是things表的数据量
22.skip限制返回记录的起点
例如,从第三行开始记录五条数据,db.things.find().skip(3).limit(5);
23.sort排序
db.things.find().sort({j:1}); //升序
db.things.find().sort({j:-1}); //降序
24.distinct去掉重复值
查询去掉重复值的方法,返回的是一个新的列表,类似关系数据库中的视图操作。
db.things.distinct(“j”);
25.group分组统计
Db.things.group(
{key:{a:true , b:true},
cond:{active:1},
reduce:function(obj,prev){prev.csum += obj.c; },
initial:{ csum:0 }
});
Key 要分组的列
Cond 分组条件
Reduce 分组的计算方法
Initial 分组的初始值
26.存储过程
db.things.save.({_id:”get_count” , value:function(){
return db.c1.count();}});
db.eval(‘get_count()’);
27.数据更新
update命令
db.thins.update(criteria ,objNew , upsert , multi );
Criteria //查询条件,类似关系数据库WHERE的内容
objNew //更新操作符,类似关系数据库SET后面的内容
upsert //如果不存在update的记录则是否插入objNew 的内容,true是插入,false是 不插入
multi //默认是false,只更新找到的第一条记录。如果是true,按条件查出来的多条 记录全部更新。
例如:
db.things.insert({count:2,test2:”silei”});
db.things.insert({count:3,test2:”silei”});
db.things.find();
db.things.update({“count”:{$gt:1}},{$set:{“test2”:”OK1”}});
db.things.find();
db.things.update({“count”:{$gt:1}},{$set:{“test2”:”OK1”}},false,true);
db.things.find();
db.things.update({“count”:{$gt:1}},{$set:{“test2”:”OK1”}},true,false);
db.things.find();
save命令
db.things.save(obj);
没有就插入,有就更新。
28.数据更新操作符
$inc file的这一项的值加上value
{$inc:{file:value}}
$set
{$set:{file:value}}
$unset 删除字段
{$unset:{file1}}
$push 把value的值加到file中去,file必须是数组类型,如果file不存在,则加一个 数组类型进去
{$push:{file:value}}
$pushAll 一次追加多个值
{$pushAll:{file:value_arrary}}
$addToSet 加value到数组内,只有不存在这个值时才增加
{$addToSet:{file:value}}
$pop
{$pop:{file:-1}} 删除第一个值
{$pop:{file:1}} 删除最后一个值
$pull
{$pull:{file:value}} 删除一个等于value的值
$pullAll
{$pullAll:{file:value_arrary}} 删除数组内的多个值
$rename
{$rename:{file:value}} 完成字段的重命名