7

我在我的项目中使用 RethinkDB 并具有以下表结构:

data_item {
    id: "generated_thing",
    slug: "slug"
}

aggregation_of_data_items {
    items: ["some", "ids", "from", "data_item", "table"]
}

当我从内容表中删除项目时,我想保持数据一致 - 从aggregation_of_data_items.items 数组中删除ID - 是否有机会在一个请求中执行此操作(类似于MongoDB 中的$pull 或$pullAll)?

4

1 回答 1

5

要从数组中删除一个项目,您可以执行以下操作(这是在 Python 中,但它适用于任何支持的语言):

def remove(doc, value):
  doc.replace(
    lambda doc: doc.merge({"items" : doc["items"].set_difference([value])}))

现在我们只需要运行一个同时执行两者的查询,最简单的方法是将它们放入一个数组中:

[r.table("data_item").get(id).delete(),
 remove(r.table("aggregation_of_..").get(...), id)]
.run()
于 2013-12-16T19:36:43.347 回答