RethinkDB 中如何处理多态字段?
How are polymorphic fields handled in RethinkDB?
假设我有一个字段 A
,其值为:
"some string"
12
["I'm an array"]
{"great": "also an object"}
这是如何工作的? (如果有的话)
即:例如,在 Elasticsearch 中,如果不存在显式映射,则会根据针对所述字段出现的第一个值在幕后创建隐式字段映射。
例如:如果 "some string"
作为 A
的第一个值出现,则假定 A
从那时起包含字符串。如果之后任何不能强制转换为字符串的东西被持久化,插入将失败。
由于 RethinkDb 是无模式的(没有字段映射),同样的逻辑是否适用于此?
或者,作为替代方案,在类型上不做任何假设,并且多态值可以在同一个字段中愉快地并存?
类型上没有任何假设,相同的字段可以有不同的类型。他们可以幸福地生活在一起。在查询时,如果需要根据字段类型做一些特殊的判断,可以使用branch
和typeOf
,或者pre-processing和map
。
您可以在数据探索器中尝试:
r.table('user').insert({f: "12"});
r.table('user').insert({f: 12}) ;
r.table('user').insert({f: [12]});
r.table('user').insert({f: {v: 12}});
假设我有一个字段 A
,其值为:
"some string"
12
["I'm an array"]
{"great": "also an object"}
这是如何工作的? (如果有的话)
即:例如,在 Elasticsearch 中,如果不存在显式映射,则会根据针对所述字段出现的第一个值在幕后创建隐式字段映射。
例如:如果 "some string"
作为 A
的第一个值出现,则假定 A
从那时起包含字符串。如果之后任何不能强制转换为字符串的东西被持久化,插入将失败。
由于 RethinkDb 是无模式的(没有字段映射),同样的逻辑是否适用于此?
或者,作为替代方案,在类型上不做任何假设,并且多态值可以在同一个字段中愉快地并存?
类型上没有任何假设,相同的字段可以有不同的类型。他们可以幸福地生活在一起。在查询时,如果需要根据字段类型做一些特殊的判断,可以使用branch
和typeOf
,或者pre-processing和map
。
您可以在数据探索器中尝试:
r.table('user').insert({f: "12"});
r.table('user').insert({f: 12}) ;
r.table('user').insert({f: [12]});
r.table('user').insert({f: {v: 12}});