如何在深度嵌套但可预测放置的属性上执行eqJoin()?

时间:2015-07-05 19:43:33

标签: rethinkdb

我有一个表(数据库名称为libstats,表名为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添加到每个对象中,这样我得到的结果如下:

{...    “通道”:{        “1”:[                {                    “基地”:2121000000,                    “library_id”:“SL58264”,                    “library_name”:'my_library_name',< ---添加了属性                    “perc_raw_clusters”:4.83,                    “pf_reads”:21209905,                    “q30”:91.57,                    “qscore”:35.62,                    “读”:22701386                },                ...             ] ...   ... {

我有另一个表library_name属性(db name libraries,表名libraries),结构更简单:

{
   library_id: 'SL123456',
   library_name: 'my_library_name'
}

我可以使用RQL查询来完成此任务吗?在更简单的表格上,eqJoin()可以很好地工作,但是我无法使用这个更复杂的结构。

1 个答案:

答案 0 :(得分:1)

如果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')})};})