2016-05-22 12 views
2

insertOneに今すぐ挿入するObjectId文書を入手したいと思います。
私の考えでは、クライアント側で_idを生成する方法があります。別の方法は、ドキュメントで指定されたフィールドによるクエリです。どちらの方法が優れているの?
ps:私はmongoのObjectIdが機械と時間情報で生成されることを知っています。
言い換えれば、私は、ObjectIdがクライアントまたはmongodサーバー上で生成するはずのmongoのことを意味するのでしょうか?mongo scalaドライバ使用後に_idを取得するinsertOne

答えて

1

MongoDBドキュメントで指定されているように、Mutableドキュメントを使用する場合は、MongoDBが作成した_idを持つドキュメントを自動的に取得する必要があります。

Insert MongoDB -> See warning part

あなたはScalaで、我々は、デフォルトでinmutableオブジェクトを操作している時間の大部分を知っているよう。これは副作用によって引き起こされた失敗を避けるために良いことです。

たとえば、2つのリストを連結すると、新しいリストが取得され、キーを挿入すると同じようにMapが発生し、新しいMapが返されます。 Javaのように他言語のopossiteとしては、内部状態を変更するオブジェクト(ポインタ)が1つしかありません。

ですから、モンゴのinmmutable文書を使用する場合:

val doc: org.mongodb.scala.bson.collection.immutable.Document = Document("name" -> "MongoDB", "type" -> "database", 
          "count" -> 1, "info" -> Document("x" -> 203, "y" -> 102)) 

collection.insertOne(doc)... 

「DOC」(あなたがモンゴによって自動生成_idを持つことになりません)inmmutableだろう。

しかし、あなたが使用している場合:挿入後

val doc: org.mongodb.scala.bson.collection.mutable.Document = Document("name" -> "MongoDB", "type" -> "database", 
          "count" -> 1, "info" -> Document("x" -> 203, "y" -> 102)) 

collection.insertOne(doc)... 

を、あなたの "DOC" ドキュメントに_idフィールドを持つことになります。

insertOne方法でmutable.Documentを使用する方法
val doc: Document = Document("_id" -> ObjectId(), "name" -> "MongoDB"...) 
+0

その他の方法あなたが言ったように、常にのようなものを使用したObjectIdを提供するのですか? – LoranceChen

+0

新しいドライバでは挿入が非同期であるため、Observableに登録したり、Futureに変換して処理したりする必要があります。 – pianista

+1

collection.insertOne()メソッドがscalaのパラメータとして可変文書を消費しないのはなぜですか?ドライバ1.1.1? – LoranceChen

関連する問題