非关系数据库诞生的缘由。
其实可以类比Java和Python,一种有着严格的类型控制,所有变量的声明都要说明是int还是String还是其他啥啥。一种则是所有变量都可以用var来声明,如果是单兵作战来开发的话,写起来就会比较容易。
再类比一个团队的沟通,一种是大家都有明确的术语,那么新人过来先熟悉术语,在讨论的时候就不会蒙圈。另一种是术语是不明确的,但大家极有默契,眼神就能沟通。
其实对于一个长期的系统来说,个人觉得python,mongo,眼神交流,还是少用为好。当然了,就算用java,mysql,术语交流,到了一定程度也免不了一团乱,也没法长期维护。所有都是tradeoff,都是在动态规划。
那mongo解决啥问题?
首先作为数据库来说,所有的增删改查都是具备的,不然就不叫事务了。
并且mongoDB4.0开始,也支持多文档事务。
有了这些前置的保底的基础,那就可以用mongoDB做些复杂的业务了。
那mongo可感知的特点有两个。
第一是它是不需要预先定义表字段。这就是它的非关系型的特点。每次insert数据的时候,如果这个表中没有insert数据中存在的字段,当场会创建。
第二是它是对象结构的。其实什么json啊bson啊文档啊,这些东西统统都是对象。早年学的很累,觉得一大堆概念,其实就一回事。技术就是喜欢取些乱七八糟的名字。同理mongo的collection就是mysql的table。mongo的collection中的每一行,都是对象型的bson,bson可以有层级。
那要不要用mongo,个人依然觉得在一个大型系统中尽量避免,或者像是用mysql一样比较严格地去先知mongo的用法,因为比起灵活以外,对于大型系统来说,我们更要知道我们正在做什么。但是,当限制灵活度的时候,不就退化成了mysql了吗。