2016-05-22 86 views
2

我希望獲得剛剛插入的使用insertOne的文件ObjectId
我認爲,一種方法是在客戶端生成_id,另一種方式是通過指定字段與文檔進行查詢。哪種方法更好或有其他方法?
ps:我知道mongo中的ObjectId是用機器和時間信息生成的。
總之,我只是想知道mongo ObjectId應該在客戶端還是mongod服務器上生成的意思呢?mongo scala驅動程序使用後得到_id insertOne

回答

1

正如MongoDB文檔指定的那樣,如果您使用可變文檔,您應該使用由MongoDB自動創建的_id自動取回文檔(如果沒有提供)。

Insert MongoDB -> See warning part

正如你在斯卡拉知道我們是在默認情況下inmutable對象工作的大部分時間。這是很好的,因爲你避免了副作用導致的失敗。例如,如果連接兩個列表,您將獲得一個新的列表,並且在您插入一個鍵時會返回一個新的Map,同樣的情況也會發生。作爲Java的其他語言的opossite,您將只有一個對象(指針)可以改變其內部狀態。

所以如果你使用蒙戈的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」將是inmmutable(讓你不將蒙哥通過自動生成的_id)。

但是如果你使用:

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)... 

在插入之後,你將不得不在你的「文檔」文件的_id領域。

就像你說的另一種方式是始終提供的ObjectId使用類似:

val doc: Document = Document("_id" -> ObjectId(), "name" -> "MongoDB"...) 
+0

如何使用mutable.Document與insertOne方法? – LoranceChen

+0

注意在新的驅動程序中插入是異步的,所以你必須訂閱Observable,或者將它轉換爲Future並且進行處理... – pianista

+1

爲什麼collection.insertOne()方法不使用可變文檔作爲scala中的參數驅動程序1.1.1? – LoranceChen

相關問題