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位是计数器。



原文地址:https://www.cnblogs.com/sunnyfarmer/p/2204021.html