Casbah チュートリアル ( http://mongodb.github.com/casbah/tutorial.html ) で、MongoDB でオブジェクトを書き込み/更新/削除する方法についての説明が見つかりません。例を手伝うか、これらのメソッドを探すクラスを教えてください。ありがとう!
2 に答える
更新された回答
この質問がされて回答されてから数か月後、Casbah のドキュメントが更新され、CRUD 操作のセクションが含まれるようになりました。おそらく、この質問/回答がそれを実現するのに役立ちました。あるいは、DB チュートリアルで CRUD 操作を文書化していないのは大変なことだと誰かが気付いたのかもしれません。
元の回答
Cashbah チュートリアルで、MongoDB データベースにドキュメントを挿入、更新、または削除する方法の例が提供されていない理由を理解するには、Casbah ドキュメントの最初の段落から始めるのが適切です。
Casbah は、MongoDB 用の Scala ツールキットです。Casbah は、Scala とのより良い統合のために、公式の mongo-java-driver の上にレイヤーを統合するため、「ドライバー」ではなく「ツールキット」という用語を使用します。これは、MongoDB ワイヤ プロトコルのネイティブ実装とは対照的であり、Java ドライバーが非常にうまく機能します。完全に書き直すのではなく、Casbah は Implicit と 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")
)
}
}