gpt4 book ai didi

rethinkdb - RethinkDB 中的批量更新

转载 作者:行者123 更新时间:2023-12-01 16:34:56 27 4
gpt4 key购买 nike

我正在尝试根据哈希中的一些预先计算的值更新 RethinkDB 中的多个文档。即

给定一个带有主键 slug 的表 stats 以及诸如

的数据
[{slug: 'foo', stats: {}}, {slug:'bar', stats:{}}]

并给出一个具有类似

值的哈希值
updated_stats = {
'foo' => {a: 1, b: 2},
'bar' => {a: 3, b: 4}
}

我能做到

updated_stats.each{|k,v| 
r.table('stats').get(k).update{|s|
{ :stats => v }
}
}

那么,为什么我不能执行以下操作?

r.table('stats').get_all(*updated_stats.keys).update{|s| 
{ :stats => updated_stats[s["slug"]] }
}

rql 将 nil 显示为 Updated_stats[s["slug"]] 的值。非常感谢对此的任何帮助。谢谢。

最佳答案

对于任何寻找如何批量更新记录的人来说,这实际上非常简单,但一点也不直观。

您实际上必须执行插入,同时指定如果存在任何冲突,则更新这些记录。显然,您需要提供要更新的每条记录的 ID。

使用以下数据集:

|-------------|--------------|
| id | title |
|-------------|--------------|
| 1 | fun |
|-------------|--------------|
| 2 | in |
|-------------|--------------|
| 3 | the |
|-------------|--------------|
| 4 | sun |
|-------------|--------------|

这是一个示例(javascript):

const new_data = [
{id: 1, title: 'dancing'},
{id: 4, title: 'rain'},
];

r.db('your_db').table('your_table').insert(new_data, {conflict: 'update'});

结果将是:

|-------------|--------------|
| id | title |
|-------------|--------------|
| 1 | dancing |
|-------------|--------------|
| 2 | in |
|-------------|--------------|
| 3 | the |
|-------------|--------------|
| 4 | rain |
|-------------|--------------|

不过,您应该注意的一个警告是,如果您在 new_data 数组中表示表中当前不存在的内容,它将被添加/更新插入.

干杯!

关于rethinkdb - RethinkDB 中的批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21488489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com