MongoDB存储大小跟文档数量有很大关系。这句话的意思是,同样的信息集, 将其分割成多文档存储与将其分割成多个内嵌对象,放在一个文档的数组里面是有天壤之别的。 总的来说: (1)前者操作(CURD)更容易一些,后者更困难一些(数组提供的限定操作api)。 但前者的存储空间会比后者占用大很多。 (2)数组的操作api基本可以满足一般需求。可以通过aggregate以及3.2版本提供的filter,完成一些高级操作。 (3)数组的更新有个致命问题,就是不能同时更新同一数组内的多个对象。起码暂时没有。 当然有将多个对象插入或删除的api,但没有更新api。 (4)单文档的插入速度会随着该文档的大小变大而变差。 普通PC上面跑的服务,文档达到5M后,一次update耗时0.1秒左右 (5)单文档最大大小目前支持16M,当然官方也提供的api处理超过16M的情况。 单实测情况,单文档16M后基本变得不可用。 (6)若需提高操作效率,需要控制单文档大小在合理范围。太小会浪费存储空间,太大会导致操作慢。 (7)若数组过大,可考虑用多个文档,采用存放链表指针(存放下个文档的id)实现长链表。 所以综合场景,按需设计数据结构,在存储容量及实现难度、操作复杂度进行综合设计。