Mongo Scala异步客户端不写

时间:2017-12-01 22:22:53

标签: mongodb scala asynchronous mongodb-query

使用此代码尝试使用新的Scala异步驱动程序进行upsert,但即使多次调用此数据库,也永远不会创建数据库:

override def insertOrUpdateOne(user: UserNew): Future[Unit] = {
  users.replaceOne(equal("_id", user._id), user)
    .toFuture
    .map(_ => ())
}

mongo客户端创建得很好,集合创建得很好,但是上面导致没有执行写入实际上从未创建db(这应该在第一次写入时发生)。我有其他使用casbah的代码,它同步工作。

users是Mongo系列,没有我的语法糖。 (编辑)的

toFuture似乎做了订阅(它应该触发写入?)但它仍然不起作用。我将一些集合与casbah混合,一个与异步客户端混合,casbah可以工作但不是上面使用异步的那个。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

应该是

override def insertOrUpdateOne(user: UserNew): Future[Unit] = {
  users.replaceOne(equal("_id", user._id), user, UpdateOptions().upsert(true))
    .toFuture
    .map(_ => ())
}

文档中没有任何内容,但是当我阅读代码时,我发现它默认为upsert。

BTW这允许我们忽略所有Observablesubscribe内容以及回调设置。只需在Scala惯用语someFuture.map()中处理结果,这会将UsersDao非Mongo特定代码作为接口。这反过来允许UsersDaoImpl中的所有代码处理Mongo特定的东西,这使得Impl能够被注入,因此可以选择运行Impl Impl。可以在没有依赖代码关怀或了解{{1}}的情况下替换Mongo。