例我有个表,表结构为key1,key2,key3,key4。此表中有2条数据,第1条有key1和key2有值,第二条只有key3有值
这样导致取出的结果集attributes对应不上,为什么空值的字段不显示出来呢?
因为这个没办法跑应用的程序去调attributes[key1],第2条数据就没有key1只有key3,请问如何解决。

首先要明确一下,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 来看待)就不会有那个字段,不存在空值一说。

对,正因为这样,所以我不知道表里新增了哪些字段,请问有获得表结构的方法吗??
另外LeanCloud表字段数有限制吗?

  1. 我们有获取每张表 Schema 的 API,但没有开放给 SDK。所以你只能在我们的网站控制台查看各张表的 Schema。

  2. 事实上,根据你的问题,根本不需要在客户端获取到整张表所有的字段。使用 Schema-Free 的存储,你应该面向数据而不是面向结构编程。例如你通过我们的 SDK 获取到一个 AVObject 数组,通过比较简单的手段就可以逐个处理 AVObject,不管它有没有某个特定的字段。更何况,某张表的字段,不都是你通过程序来增加的吗?既然如此,难道你不能在自己的程序里知晓这些字段?

  3. MongoDB 没有针对单条记录(不要再拿整张表考虑问题)做字段数限制,而对单条记录(document)有大小(size)限制,默认是 16MB。参考链接 http://docs.mongodb.org/manual/reference/limits/4

谢谢,看来不适合做列表页的开发啊。。。。。明白了。
我查出来的数据要以table的方式显示在页面上,我的JS可以这样写
_tr = "<tr><td>"+字段1+"</td><td>"+字段2+"</td><td>"+字段3+"</td></tr>"
如果一但遇到某个字段没有,报错停止了。。。唉

其实你可以参考一下我们控制台的页面 HTML,控制台那里也是从服务端得到 AVObject 数据,然后将他们展示出来(其中必然有一些字段是缺失的)。