https://rethinkdb.com/docs/sql-to-reql/javascript/
https://rethinkdb.com/docs/data-modeling/
https://www.youtube.com/watch?v=vJtDNRsUozk
================
2016-04-21 from Jorge’s example:
//r.db(‘test’).table(‘Cities’).delete()
//r.db(‘test’).tableCreate(‘States’)
//r.db(‘test’).tableCreate(‘Cities’)
//r.db(‘test’).tableCreate(‘State_to_Cities’)
/*
r.db(‘test’).table(‘States’).insert([
{ ‘id’  : 1, ‘name’ : ‘California’},
{ ‘id’  : 2, ‘name’ : ‘Oregon’}])
r.db(‘test’).table(‘Cities’).insert([
{ ‘id’  : 1, ‘name’ : ‘Portland’},
{ ‘id’  : 2, ‘name’ : ‘Salem’},
{ ‘id’  : 3, ‘name’ : ‘San Francisco’},
{ ‘id’  : 4, ‘name’ : ‘Mountain View’}])
r.db(‘test’).table(‘State_to_Cities’).insert([ { ‘state’ : 1, ‘city’ : 3 } , { ‘state’ : 1, ‘city’ : 4 }, { ‘state’ : 2, ‘city’ : 1 }, { ‘state’ : 2, ‘city’ : 2 } ])
r.db(“test”).table(“States”).get(1).merge(
    { “Cities”: r.db(“test”).table(“Cities”).getAll(
            r.args(r.db(“test”).table(“State_to_Cities”).getAll(1, {index: “states”})(“city”).coerceTo(‘array’))
        ).coerceTo(‘array’)
    })
/***  old python example:”
r.db(‘test’).table(‘States’)
   .get(StateId).merge({
       ‘Cities’ : r.db(‘test’).table(‘Cities’)
          .getAll(r.args(r.db(‘test’).table(‘State_to_Cities’)
            .getAll(stateId, index=“state”)[“city”]
           ))
})
****/
Jorge’s example of an embedded city:
var db = r.db(‘test’);
db.tableCreate(‘States’);
db.table(‘States’).insert([
  { ‘id’  : 1, ‘name’ : ‘California’, cities: [ {name: ‘San Francisco’},{name:‘Mountain View’}] }
  , { ‘id’  : 2, ‘name’ : ‘Oregon’    , cities: [ {name: ‘Portaland’    },{name:‘Salem’      }] }
 ]);
db.table(‘States’).filter({id:1});
r.db(‘test’).table(‘States’).insert({‘name’:‘Washington’, ‘cities’: [] })
r.db(‘test’).table(‘States’) .get(“ef628142-2cac-4b18-aa7a-7de346a09123”) .update({‘cities’: r.row(‘cities’).append({‘name’:‘Tacoma’}) });
Jorge’s example of State with embedded City array:
/*
r.db(‘test’).table(‘States’).insert([
  { id :  1 
  , name: ‘California’
  , cities: [ 3,4]
  },
  { id:  2
    , name: ‘Oregon’
    , cities: [1,2]
    }
  ])
r.db(‘test’).table(‘Cities’).insert([
   { id: 1, name: ‘Portland’ }
  ,{ id: 2, name: ‘Salem’  }
  ,{ id: 3, name: ‘San Jose’ }
  ,{ id: 4, name: “Mountain View”}
])
r.db( ‘test’ ).table( ‘States’ ) .get( 1 ) .merge({ cities: r.db( ‘test’ ).table( ‘Cities’ ).getAll( r.args( r.row( ‘cities’ ) ) ).coerceTo( ‘array’ ) })
===
trying to join two embedded records:
var db = r.db(‘test’);
db.tableCreate(‘parentOne’);
db.table(‘parentOne’).insert([
  {‘id’: 11, name: ‘parent one row one’
  , embeddedRecords: [{ keyValue : ‘11aa’, name:‘parent one record one embedded one’}
                     ,{ keyValue : ‘11bb’, name:‘parent one record one embedded two’}
                     ]
  },{‘id’: 22, name: ‘parent one row two’
  , embeddedRecords: [{ keyValue : ‘22aa’, name:‘parent one record two embedded one’}
                     ,{ keyValue : ‘22bb’, name:‘parent one record two embedded two’}
                     ]
  }
]);
db.tableCreate(‘parentTwo’);
db.table(‘parentTwo’).insert([
  {‘id’: 121, name: ‘parent two row one’
    , embeddedRecords: [{ keyValue : ‘111aa’, name:‘parent two record one embedded one’, parentOneKey: ‘11aa’}
                       ,{ keyValue : ‘111bb’, name:‘parent two record one embedded two’, parentOneKey: ‘11bb’}
                       ]
  },{‘id’: 222, name: ‘parent two row two’
    , embeddedRecords: [{ keyValue : ‘222aa’, name:‘parent two record two embedded one’, parentOneKey: ‘22aa’}
                       ,{ keyValue : ‘222bb’, name:‘parent two record two embedded two’, parentTwoKey: ‘22bb’}
                     ]
  }
]);
===
r.db(‘test’).tableCreate(‘firstTable’)
db(‘test’).tableCreate(‘nextTable’)
r.db(‘test’).table(‘firstTable’).insert({
  name  : ‘firstTable first record’,
  firstTable_embedded_records: [ 
  {     embedded_record : ‘firstTable first embedded record’},
  {     embedded_record : ‘firstTable second embedded record’}
  ]
})
r.db(‘test’).table(‘nextTable’).insert({
  name  : ‘nextTable first record’,
  nextTable_embedded_record: [ 
    {     embedded_record : ‘nextTable first embedded record’ , external_key: ‘firstTable first embedded record’},
    {     embedded_record : ‘nextTable second embedded record’, external_key: ‘firstTable second embedded record’ }  
  ]
})
r.db(“test”).table(‘firstTable’) .indexCreate ( ‘firstTable_embedded_records’ , r.row(‘firstTable_embedded_records’)(‘embedded_record’) , {multi: true} )
r.db(‘test’).table(‘nextTable’).map(function (nRow) 
{
     return nRow(‘nextTable_embedded_record’)
                    .eqJoin      (  “external_key”
                                    , r.db(‘test’).table(‘firstTable’)
                                    , {index: ‘firstTable_embedded_records’}
                                    )
                                    .zip();
})
======================================
embedded eqJoin:
r.db(‘comptonTransAnlys’).table(‘Context’) .indexCreate(‘Sound_id’)
r.db(‘comptonTransAnlys’).table(‘Language_norms’) .indexCreate(‘Context_id’)
r.db(‘comptonTransAnlys’).table(‘Stimword_position’)   .indexCreate(‘Context_id’)
r.db(‘comptonTransAnlys’).table(‘Stimword_position’)   .indexCreate(‘Stimword_id’)
r.db(‘comptonTransAnlys’).table(‘Client_master’)          .indexCreate(‘Session_names_id’)
r.db(‘comptonTransAnlys’).table(‘Client_master’)          .indexCreate(‘Teacher_id’)
r.db(‘comptonTransAnlys’).table(‘Client_context’)         .indexCreate(‘Context_id’)
r.db(‘comptonTransAnlys’).table(‘Client_context’)         .indexCreate(‘Client_master_id’)
r.db(‘comptonTransAnlys’).table(‘Client_context’)         .indexCreate(‘Frequency_list_id’)
r.db(‘comptonTransAnlys’).table(‘Client_stimword’)       .indexCreate(‘Client_context_id’)
r.db(‘comptonTransAnlys’).table(‘Client_stimword’)       .indexCreate(‘Stimword_position_id’)
r.db(‘comptonTransAnlys’).table(‘Sound’) .eqJoin(‘id’, r.db(‘comptonTransAnlys’).table(‘Context’), {index:‘Sound_id’}).zip() .eqJoin(‘id’, r.db(‘comptonTransAnlys’).table(‘Stimword_position’), {index:‘Context_id’}).zip()
r.db(‘comptonTransAnlys’).table(‘Sound’) .eqJoin(‘id’ , r.db(‘comptonTransAnlys’).table(‘Context’) , {index:‘Sound_id’}).zip() .eqJoin(‘id’ , r.db(‘comptonTransAnlys’).table(‘Stimword_position’) , {index:‘Context_id’}).zip() .eqJoin(‘Stimword_id’ , r.db(‘comptonTransAnlys’).table(‘Stimword’) , {index: ‘id’})