Deepstream不从RethinkDB表中获取数据

时间:2016-09-29 12:18:38

标签: javascript rethinkdb deepstream.io

无法从我在rethinkDB中创建的表中获取数据。

我在retinkDB中创建了一个新表 - items

并填写数据:

r.db('test').table('items').insert([
    {name: 'qqq'},
    {name: 'www'},
    {name: 'eee'}
])

但是 .getList()永远不会返回表格的数据:

client.record.getList('items') // '.getEntries()' always return []

我真的不明白为什么.getList('items')没有从items表返回数据。

假设这是因为条目结构:当您通过deepstream创建条目时,条目的结构如下:

[
 ...
  {
    "_d": {
     "id": "qqq"
     "name": 'qqq' 
    },
    "_v": 0,
    "ds_id":  "qqq"
  }
 ...
]

但我的结构只是:

[
  {
    "id": 'qqq'
    "name": 'qqq'
  }
]

我的问题是:如何在rethinkDB中创建包含数据的表(通过脚本),我们可以使用deepstream吗?

2 个答案:

答案 0 :(得分:-1)

我找到了一个解决方案。

首先应使用正确的primaryKey ===“ds_id”:

创建表
r.db('test')
  .tableCreate('items',
    {
      primaryKey: 'ds_id'
    })

之后你必须插入类似深层结构的数据:

r.db('test').table('items').insert([
  {
    "_d": {
      "id": r.uuid(),
      "name": "qqq"
    },
    "_v": 0,
    "ds_id": r.uuid()
}
])
要使_d.id等于ds_id

P.S。,请使用此功能:

r.db('test').table('items').forEach(function(c) {
  return r.db('test').table('items').get(c('ds_id')).update(function(row) {
    return {_d: {id: row('ds_id')}};
  });
})

这是愚蠢的,但我不知道如何以更优雅的方式做到这一点。

答案 1 :(得分:-1)

deepstream旨在为您管理数据。只需说

var bmw = ds.record.getRecord( 'cars/bmw' )

deepstream将创建一个名为cars的表,并在其中存储主键为bmw的条目。您不会被要求自己创建表。