标签: rethinkdb-python

如何从RethinkDB文档中删除密钥?

我正在尝试从RethinkDB文档中删除密钥.我的方法(没有用):

r.db('db').table('user').replace(function(row){delete row["key"]; return row}) 
Run Code Online (Sandbox Code Playgroud)

其他方法:

r.db('db').table('user').update({key: null}) 
Run Code Online (Sandbox Code Playgroud)

这个只设置row.key = null(看起来合理).

通过Web UI 在rethinkdb数据资源管理器上测试的示例.

rethinkdb rethinkdb-python

41
推荐指数
3
解决办法
1万
查看次数

如何在rethinkdb中将元素追加到数组中

我有这个对象:

{
    "id": "eb533cd0-fef1-48bf-9fb8-b66261c9171b" ,
    "errors": [
        "error1" ,
        "error2"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我只想在错误数组中添加一个新错误.我试过了:

r.db('test').table('taskQueue').get("eb533cd0-fef1-48bf-9fb8-b66261c9171b").update({'errors': r.row['errors'].append('appended error')})
Run Code Online (Sandbox Code Playgroud)

但这没用.它给出了这个错误:"TypeError:r.row.errors未定义"

我的问题是如何追加数组?

rethinkdb rethinkdb-python

18
推荐指数
1
解决办法
4728
查看次数

重新启动服务器后RethinkDB丢失数据

我将数据保存在RethinkDB数据库中.只要我不重启服务器,一切都很好.但是当我重新启动时,它给出了一个错误,说数据库不存在,尽管文件夹和数据确实存在于文件夹rethinkdb_data中.问题是什么 ?

python rethinkdb rethinkdb-python ubuntu-14.04

7
推荐指数
1
解决办法
785
查看次数

如何在rethinkdb中创建复合多索引?

我正在使用Rethinkdb 1.10.1与官方python驱动程序.我有一个与一个用户关联的标记事物表:

{
    "id": "PK",
    "user_id": "USER_PK",
    "tags": ["list", "of", "strings"],
    // Other fields...
}
Run Code Online (Sandbox Code Playgroud)

我想查询user_idtag(比如,用标签"tag"查找用户"tawmas"的所有内容).从Rethinkdb 1.10开始,我可以像这样创建一个多索引:

r.table('things').index_create('tags', multi=True).run(conn)
Run Code Online (Sandbox Code Playgroud)

我的查询将是:

res = (r.table('things')
       .get_all('TAG', index='tags')
       .filter(r.row['user_id'] == 'USER_PK').run(conn))
Run Code Online (Sandbox Code Playgroud)

但是,此查询仍需要扫描具有给定标记的所有文档,因此我想基于user_id和tags字段创建复合索引.这样的索引允许我查询:

res = r.table('things').get_all(['USER_PK', 'TAG'], index='user_tags').run(conn)
Run Code Online (Sandbox Code Playgroud)

文档中没有关于复合多索引的内容.但是,我尝试使用自定义索引函数,通过返回对列表来["USER_PK", "tag"]组合复合索引和多索引的要求.

我的第一次尝试是在python中:

r.table('things').index_create(
    'user_tags',
    lambda each: [[each['user_id'], tag] for tag in each['tags']],
    multi=True).run(conn)
Run Code Online (Sandbox Code Playgroud)

这使得python驱动程序扼杀了MemoryError试图解析索引函数(我猜驱动程序不支持列表推导).

所以,我转向我的(诚然,生锈的)javascript并想出了这个:

r.table('things').index_create(
    'user_tags',
    r.js(
        """(function (each) {
            var result = [];
            var user_id = each["user_id"];
            var tags = each["tags"];
            for (var i = …
Run Code Online (Sandbox Code Playgroud)

rethinkdb rethinkdb-python

5
推荐指数
1
解决办法
1049
查看次数

如何在rethinkdb中过滤数组大小?

我有一张桌子,桌子上有一堆文件,这些文件会定期(部分)进行更新。

我本质上想做的是创建另一个表(changes以下称为表),该表存储每个文档的最新N个更改。

因此table.changes(),我要做的是获取表上的所有更改,计算所需的diff信息(diffentry在下面称为),然后将该信息添加到另一个表中的数组中:

changes.get(doc_id).update({
    'diffs': R.row['changes'].prepend(diffentry)
}).run()
Run Code Online (Sandbox Code Playgroud)

这个棘手的地方是如何限制diffs数组的大小?

有一个delete_at()可以从数组中删除一个或多个项目的数组方法,我可以 “蛮力”调用,例如:

delete_at(diff_limit, diff_limit + 10000)
Run Code Online (Sandbox Code Playgroud)

并忽略任何错误(疯狂的上限只是偏执狂)。但这有点脏...

我认为更好,更好的方法是对大于限制的数组进行过滤并删除多余的位。伪:

changes.get(doc_id).filter(R.row['diffs'].length > diff_limit).update({
    'diffs': R.row['diffs'].delete_at(diff_limit, R.row['diffs'].length - 1)
}).run()
Run Code Online (Sandbox Code Playgroud)

但是,可惜,length我还没有发现……关于如何以一种不错的方式来做这种事情的任何想法?

arrays rethinkdb rethinkdb-python

4
推荐指数
1
解决办法
1387
查看次数