首先要明确一下,LeanCloud 采用的是 Schema-Free 的存储方式,后端数据库为 MongoDB。Schema-Free 意味着你在保存一条数据记录的时候不需要考虑后端的数据表为何种结构。也意味着,你的表结构可以随时随刻发生变化。我们来看看这个演化过程:
- 存入记录 A:{"key1": "value1", "key2": "value2"}
// 表结构(schema):
|--- key1: String
|--- key2: String
// 表数据(data):
{"key1": "value1", "key2": "value2"}
- 存入记录 B:{"key1": "value1", "key3": "value3"}
// 表结构(schema):
|--- key1: String
|--- key2: String
|--- key3: String
// 表数据(data):
{"key1": "value1", "key2": "value2"}
{"key1": "value1", "key3": "value3"} // 注意,这里不是 {"key1":"value1", "key2": null, "key3": "value3"}
在整个过程中,Schema 都在发生变化,同时存入数据库的记录并不需要根据所谓的表结构来为某些字段补充缺省值。简言之,你存到数据库的单条记录没有某个字段,之后读出来的结果(bson,可以按照 json 来看待)就不会有那个字段,不存在空值一说。