Mongodb与Mongoose的学习体会
youngwind opened this issue · 0 comments
youngwind commented
原因
之所以要学mongo,是因为自己要写一个githubStarManager,见 #70 ,以前用过mysql和sequelize,这次基于两个原因选用了mongo。
- 我要从github公共api上抓数据,用mongo的话能够直接存储返回的json数据,不需要再拆分字段。
- 之前一直听说mongo,也想试试新鲜事物。
如何快速上手一种数据库?
经过之前mysql和sequelize的学习, #43, #44 , 我总结出了快速学习一门数据库的几个基本步骤。
- 安装数据库本身
- 学会在命令行中直接操作数据库。(这一点非常重要,因为这可以促使我们深刻理解数据库的定义和组织方式。即便在后面我们很少用这些命令行)
- 根据语言的不同,选择相应的原生的驱动。比如同样是在nodejs下,mysql用mysql包,mongo有mongodb包。这些包虽然跟后面的orm相比,用起来很不方便,代码写起来更长,但是正是通过这些还没有封装得很抽象的包,可以让我们渐渐熟悉数据库的调用方式。
- 选用一个合适的orm。比如mysql对应的sequelize,mongo对应的mongoose,这些orm的封装程度很高,使用它们可以给我们提供很多方便。
- 选择一个可视化操作工具。比如mysql的Navicat Premium和mongo的mongobootster,可视化的工具让我们查看数据库更加直观。
mongo相关
下面是用mongo的时候碰到的一些问题。
1. collection与documents
因为平常我们用惯了sql型的数据库,对于nosql型的理解起来很困难,你可以这么理解,mongo里面的collection对应一张表,document对应表中的一行数据,每一行都会有一个_id属性作为唯一性的标志。
2. /data/db权限问题
mongo默认是把数据库建在/data/db文件夹下,但是刚开始新建的时候可能会出现权限不足的error。
Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied
解决方案:
sudo chown -R /data/db
3. 高级的orm语法
我在用数据库的时候一直就只会那么几个最基本的增删改查,但是在实际项目中你会发现有更复杂的需求,单靠这几个的话代码会写得很不优雅。
比如我现在要实现这么一个功能。查找某document是否存在,如果存在则更新它,如果不存在,则插入
如果我直接用最基本的增删改查的话,会很麻烦。mongoose提供了更抽象的方法:findOneandUpdate
遗留问题
- 对数据库和数据结构的设计还很不成熟。
- 对高级orm语法的掌握有待提高