在 RethinkDB 映射步骤中发出多个值
Emit multiple values in RethinkDB map step
我有由数组和单个值组成的数据集
{
"a": "18",
"b": ["x","y","z"]
}
或者数组与数组
{
"a": ["g", "h", "i"],
"b": ["x", "y", "z"]
}
并且我计划绘制出每个组合(例如“18-x”、“18-y”、“18-z”或 "g-x"、"g-y"...)以进行计数这些之后(或做任何其他事情)。我习惯了 CouchDB 的 emit 函数:我只是为每个文档发出多个组合。这应该如何在 RethinkDB 中完成?
注意:数据集是由连接生成的
我建议将两个字段始终设为数组,即使数组有时只有一个值。
如果你这样做,你可以用 concat_map
:
row('a').concatMap(function(a){
return row('b').map(function(b){
return a.add('-').add(b);
});
});
如果您想继续混合使用单个值和数组,可以将 r.row('a')
替换为 r.branch(r.row('a').typeOf().eq('ARRAY'), r.row('a'), [r.row('a')])
。
我有由数组和单个值组成的数据集
{
"a": "18",
"b": ["x","y","z"]
}
或者数组与数组
{
"a": ["g", "h", "i"],
"b": ["x", "y", "z"]
}
并且我计划绘制出每个组合(例如“18-x”、“18-y”、“18-z”或 "g-x"、"g-y"...)以进行计数这些之后(或做任何其他事情)。我习惯了 CouchDB 的 emit 函数:我只是为每个文档发出多个组合。这应该如何在 RethinkDB 中完成?
注意:数据集是由连接生成的
我建议将两个字段始终设为数组,即使数组有时只有一个值。
如果你这样做,你可以用 concat_map
:
row('a').concatMap(function(a){
return row('b').map(function(b){
return a.add('-').add(b);
});
});
如果您想继续混合使用单个值和数组,可以将 r.row('a')
替换为 r.branch(r.row('a').typeOf().eq('ARRAY'), r.row('a'), [r.row('a')])
。