我正在尝试从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数据资源管理器上测试的示例.
我有这个对象:
{
"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_data中.问题是什么 ?
我正在使用Rethinkdb 1.10.1与官方python驱动程序.我有一个与一个用户关联的标记事物表:
{
"id": "PK",
"user_id": "USER_PK",
"tags": ["list", "of", "strings"],
// Other fields...
}
Run Code Online (Sandbox Code Playgroud)
我想查询user_id和tag(比如,用标签"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) 我有一张桌子,桌子上有一堆文件,这些文件会定期(部分)进行更新。
我本质上想做的是创建另一个表(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我还没有发现……关于如何以一种不错的方式来做这种事情的任何想法?