MongoDB学习笔记——初体验
MongoDB是一个模式自由的非关系型数据库,由C++编写。
如果MongoDB模式自由,那么要使用多个集合的理由如下:
1、让不同类型的文档(行)放在一个集合中,那么做查询的应用程序需要处理所有不同类型的文档,耗时;
2、在一个集合里面查询特定类型的文档在速度上很不划算?(不明白)
3、把同类型的文档放在一个集合里面,让数据更加集中,在查询的时候可以减少消耗磁盘寻到的操作;
4、创建索引的时候,文档会有附加的结构;同种类型的文档放在同一个集合里面,让索引更加有效??(不明白)
部署MongoDB(windows)
1、创建数据文件夹,如D:/data/db
2、在cmd中运行MongoDB目录下的bin/mongod.exe,命令如下:
mongod --dbpath D:\data\db
ok了~
运行MongoDB客户端shell
运行MongoDB目录下的bin/mongo.exe
这个shell是一个功能完备的javascript解析器,而MongoDB的创建、读取、更新和删除(CRUD)都是通过javascript完成的,不需要sql语句。
其中db对象代表当前的数据库,连接的时候默认连接test数据库。
选择数据库(不需要创建):
use dbname;
添加doc到collection中(collection不需要手动创建):insert、save
person1={"name":"sam", "age":10};
person2={"name":"samson", "age":11};
//执行这些doc插入语句的时候,名字为person的collection自动创建,并有一个对应的数据库持久化文件存储在data/db
db.person.insert(person1);
//或者用db.person.save(person1);
db.person.insert(person2);
//或者用db.person.save(person2);
/**
**save方法是当collection存在主键一样的doc,则会对其进行属性更新,否则插入doc;
**insert方法则是直接插入一个新的doc,如果存在主键一样的doc,则会报错。
**/
读取doc:find、findOne、limit
db.person.find();//读取所有的doc
db.person.find().limit(10);//限制读取的doc的数量
db.person.findOne({"age":11});//读取所有age为11的doc
更新doc:update
person1.age=15;
person1.gender="male";
//将name为sam的doc所有属性,更新为person1的属性,还可以添加新的property
db.person.update({"name":"sam"},person1);
删除doc:remove
db.person.remove();//清空collection
db.person.remove({"age":20});//删除age为20的doc
MongoDB中每个文档的_id
加入添加到collection中的doc没有_id属性,那么系统会自动创建一个,并附加到doc里面去。
系统生成的_id为12字节的24位字符串,每字节为一个16进制的字符;前4个字节为从标准纪元开始的时间戳,然后是3位的机器名,接着是2位的PID(程序id),最后3位是计数器。