使用此代码尝试使用新的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可以工作但不是上面使用异步的那个。
有什么想法吗?
答案 0 :(得分:0)
应该是
override def insertOrUpdateOne(user: UserNew): Future[Unit] = {
users.replaceOne(equal("_id", user._id), user, UpdateOptions().upsert(true))
.toFuture
.map(_ => ())
}
文档中没有任何内容,但是当我阅读代码时,我发现它默认为upsert。
BTW这允许我们忽略所有Observable
和subscribe
内容以及回调设置。只需在Scala惯用语someFuture.map()
中处理结果,这会将UsersDao
非Mongo特定代码作为接口。这反过来允许UsersDaoImpl
中的所有代码处理Mongo特定的东西,这使得Impl
能够被注入,因此可以选择运行Impl
Impl
。可以在没有依赖代码关怀或了解{{1}}的情况下替换Mongo。