在 Casbah 教程( http://mongodb.github.com/casbah/tutorial.html )中找不到任何描述如何在 MongoDB 中编写/更新/删除对象。请帮助提供示例或告诉要查找这些方法的类。谢谢!
2 回答
更新的答案
在提出并回答了这个问题几个月后,Casbah 文档被更新为包括Doing CRUD 操作部分。也许这个问题/答案有助于实现这一目标。或者,也许有人意识到不在数据库教程中记录 CRUD 操作是克雷克雷。
原始答案
为了理解为什么 Cashbah 教程没有提供如何从 MongoDB 数据库中插入、更新或删除文档的示例,一个好的起点是 Casbah 文档的第一段:
Casbah 是 MongoDB 的 Scala 工具包 --- 我们使用术语“工具包”而不是“驱动程序”,因为 Casbah 在官方 mongo-java-driver 之上集成了一个层,以便更好地与 Scala 集成。这与 MongoDB 有线协议的本机实现相反,Java 驱动程序做得非常好。Casbah 没有完全重写,而是使用隐式和 Pimp My Library 代码来增强现有的 Java 代码。
Casbah 是一个增强 Java 驱动程序的工具包。因此,为了有效地使用 Casbah,必须先阅读 Java 驱动程序文档,然后再阅读 Casbah 文档。
为了进一步激发这个建议,看看 Casbah 如何包装 Java 驱动程序中的一些方法:
trait MongoCollectionBase extends Logging { self =>
...
val underlying: DBCollection
...
def save[A <% DBObject](jo: A) = underlying.save(jo)
...
def update[A <% DBObject, B <% DBObject](q: A, o: B) = underlying.update(q, o)
...
def remove[A <% DBObject](o: A) = underlying.remove(o)
...
正如上面的摘录所示,CasbahMongoCollection
是 Java 驱动程序的DBCollection
. 这是为了说明,如果 Casbah 工具包没有处理某些事情,那么它正在通过调用 Java 驱动程序来处理。
以下是有关如何使用 Java 驱动程序从 MongoDB 数据库中插入、更新和删除文档的示例的链接:
既然您了解了 Casbah 与 Java 驱动程序的关系,那么将这些示例移植到使用 Casbah 应该很简单。
我准备了一些如何使用 casbah 的示例,到目前为止非常简单。稍后我会添加更多功能。
https://github.com/talgendler/casbah
object AddressMongoConverter {
def convertToMongoObject(address: Address): DBObject = {
MongoDBObject(
STREET -> address.street,
ZIP_CODE -> address.zipCode,
CITY -> address.city,
COUNTRY -> address.country
)
}
def convertFromMongoObject(db: DBObject): Address = {
Address(
street = db.getAsOrElse[String](STREET, mongoFail),
zipCode = db.getAsOrElse[Int](ZIP_CODE, mongoFail),
city = db.getAsOrElse[String](CITY, "Tel-Aviv"), // slightly different get
country = db.getAsOrElse[String](COUNTRY, "Israel")
)
}
}