【问题标题】:Insert if not exists in Slick 3.0.0 for bulk insert如果 Slick 3.0.0 中不存在则插入以进行批量插入
【发布时间】:2015-09-21 10:39:54
【问题描述】:

我阅读了answer。我怎样才能对束插入做同样的事情?

我有项目列表,我插入这些项目:

tbl ++= items

每个项目只是Item(id:String, text:String)id 是主键。

我只想使用一个 sql 查询在表 tbl 中插入不存在的项目。

Slick 3,postgresql

【问题讨论】:

  • 一种方法是尝试从表中检索属于您的元素的所有 ID。这会告诉你哪些已经存在。您可以使用此信息将您的序列分为两部分:新的和更新的。然后,您可以批量插入新的。
  • @Ashalynd,我想过,但我的程序可以同时写items。我在使用 slick 时遇到了很多问题,我在 mongodb+reactivemongo.org 上替换了 slick+postgresql。感谢您的建议!
  • 我明白了。从性能的角度来看,我宁愿继续使用 Postgres,但如果它适合你,那就太酷了。

标签: scala slick


【解决方案1】:

您可以尝试这样做:

  1. 检查数据库中存在哪些条目
  2. 过滤掉它们
  3. 批量插入

代码示例:

def markAsNew(list: Seq[IssueEvent]): Future[Option[Int]] = { val ids = list.map(_.originEventId)).map(_.originEventId) dbRun((for { existing <- events.filter(_.originEventId inSet ids).result filtered = list.filter(event => existing.contains(event.originEventId)) count <- events ++= filtered } yield count).transactionally) }

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2016-05-02
    • 2016-01-07
    相关资源
    最近更新 更多