如何对嵌套较深但可预测放置的属性执行 eqJoin()?
How can I perform an eqJoin() on a deeply-nested but predictably-placed attribute?
我有一个 table(数据库名称是 libstats
,table 名称是 flowcells
),里面装满了文档,所有文档的结构如下:
{
"barcode": "C3W9UACXX",
"id": "0021732f-2c42-4e9a-90fd-c68bb0d998dc",
"lanes": {
"1": [
{
"bases": 2431000000,
"library_id": "SL58263",
"perc_raw_clusters": 5.5,
"pf_reads": 24312986,
"q30": 92.23,
"qscore": 35.82,
"reads": 25834646
},
{
"bases": 2121000000,
"library_id": "SL58264",
"perc_raw_clusters": 4.83,
"pf_reads": 21209905,
"q30": 91.57,
"qscore": 35.62,
"reads": 22701386
}...],
"2": [
{
"bases": 2431000000,
"library_id": "SL58263",
"perc_raw_clusters": 5.5,
"pf_reads": 24312986,
"q30": 92.23,
"qscore": 35.82,
"reads": 25834646
},
{
"bases": 2121000000,
"library_id": "SL58264",
"perc_raw_clusters": 4.83,
"pf_reads": 21209905,
"q30": 91.57,
"qscore": 35.62,
"reads": 22701386
}...],
},
//more keys
}
lanes
对象将始终具有相同的键(数字 1 到 8),并且与这些键中的每一个关联的数组中的对象将始终具有 library_id
属性。我需要将 library_name
添加到这些对象中的每一个,这样我就会得到这样的结果:
{ ...
"lanes":{
“1”:[
{
"bases": 2121000000,
"library_id": "SL58264",
"library_name": 'my_library_name', <---添加的属性
"perc_raw_clusters":4.83,
"pf_reads": 21209905,
"q30": 91.57,
"qscore": 35.62,
"reads":22701386
},
...
],...
...
{
我有另一个 table 具有 library_name
属性(数据库名称 libraries
,table 名称 libraries
),结构更简单:
{
library_id: 'SL123456',
library_name: 'my_library_name'
}
是否有 RQL 查询可用于完成此操作?在更简单的 table 上,eqJoin() 工作得很好,但我无法让它与这个更复杂的结构一起工作。
如果 lanes
是一个数组而不是一个对象,这会更容易,但是对于当前的文档结构,这样的查询应该可以做到:
r.db('libstats').table('flowcells').merge(function(flowcell) {return {
'lanes': flowcell('lanes').keys().map(function(n) {
return r.expr([n, flowcell('lanes')(n).merge(function(lane) {
{'library_name': r.db('libraries').table('libraries').get(lane('library_id'))}]).coerce_to('OBJECT')})};})
我有一个 table(数据库名称是 libstats
,table 名称是 flowcells
),里面装满了文档,所有文档的结构如下:
{
"barcode": "C3W9UACXX",
"id": "0021732f-2c42-4e9a-90fd-c68bb0d998dc",
"lanes": {
"1": [
{
"bases": 2431000000,
"library_id": "SL58263",
"perc_raw_clusters": 5.5,
"pf_reads": 24312986,
"q30": 92.23,
"qscore": 35.82,
"reads": 25834646
},
{
"bases": 2121000000,
"library_id": "SL58264",
"perc_raw_clusters": 4.83,
"pf_reads": 21209905,
"q30": 91.57,
"qscore": 35.62,
"reads": 22701386
}...],
"2": [
{
"bases": 2431000000,
"library_id": "SL58263",
"perc_raw_clusters": 5.5,
"pf_reads": 24312986,
"q30": 92.23,
"qscore": 35.82,
"reads": 25834646
},
{
"bases": 2121000000,
"library_id": "SL58264",
"perc_raw_clusters": 4.83,
"pf_reads": 21209905,
"q30": 91.57,
"qscore": 35.62,
"reads": 22701386
}...],
},
//more keys
}
lanes
对象将始终具有相同的键(数字 1 到 8),并且与这些键中的每一个关联的数组中的对象将始终具有 library_id
属性。我需要将 library_name
添加到这些对象中的每一个,这样我就会得到这样的结果:
{ ... "lanes":{ “1”:[ { "bases": 2121000000, "library_id": "SL58264", "library_name": 'my_library_name', <---添加的属性 "perc_raw_clusters":4.83, "pf_reads": 21209905, "q30": 91.57, "qscore": 35.62, "reads":22701386 }, ... ],... ... {
我有另一个 table 具有 library_name
属性(数据库名称 libraries
,table 名称 libraries
),结构更简单:
{
library_id: 'SL123456',
library_name: 'my_library_name'
}
是否有 RQL 查询可用于完成此操作?在更简单的 table 上,eqJoin() 工作得很好,但我无法让它与这个更复杂的结构一起工作。
如果 lanes
是一个数组而不是一个对象,这会更容易,但是对于当前的文档结构,这样的查询应该可以做到:
r.db('libstats').table('flowcells').merge(function(flowcell) {return {
'lanes': flowcell('lanes').keys().map(function(n) {
return r.expr([n, flowcell('lanes')(n).merge(function(lane) {
{'library_name': r.db('libraries').table('libraries').get(lane('library_id'))}]).coerce_to('OBJECT')})};})