Ich hoffe, das Dokument ObjectId
, die gerade jetzt verwenden insertOne
einfügen.
Mit meiner Überlegung, ein Weg ist _id auf Client-Seite generieren, ist eine andere Möglichkeit, Abfrage von einem Feld mit dem Dokument angeben. Welche Methode ist besser oder haben andere?
ps: Ich weiß, ObjectId in Mongo mit Maschinen- und Zeitinformationen zu generieren.
In einem Wort, ich frage mich nur das Sprichwort von mongo ObjectId sollte auf Client oder mongod Server generieren bedeutet?Mongo Scala-Treiber erhalten _id nach der Verwendung insertOne
Antwort
Wie das MongoDB-Dokument angibt, sollten Sie, wenn Sie das änderbare Dokument verwenden, das Dokument mit der von MongoDB erstellten _id automatisch zurückholen, wenn Sie kein Dokument bereitgestellt haben.
Insert MongoDB -> See warning part
Wie Sie in Scala kennen den größten Teil der Zeit, die wir mit inmutable Objekte standardmäßig arbeiten. Dies ist eine gute Sache, weil Sie die durch die Nebenwirkungen abgeleiteten Fehler vermeiden.
Zum Beispiel, wenn Sie zwei Listen verketten, erhalten Sie eine neue Liste, und das gleiche passiert für eine Karte, wenn Sie einen Schlüssel einfügen, wird eine neue Karte zurückgegeben. Wie in anderen Sprachen als Java möglich, haben Sie nur ein Objekt (einen Zeiger), das seinen internen Status ändern würde.
Wenn Sie also das inmmutable Dokument von Mongo verwenden:
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" wäre inmmutable (so dass Sie nicht die _id automatisch generiert durch Mongo haben).
Aber wenn Sie verwenden:
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)...
Nach dem Einsetzen werden Sie das _id Feld haben in Ihrem "doc" Dokument.
Andere Art und Weise, wie Sie gesagt ist wie immer ein ObjectId mit etwas zu bieten:
val doc: Document = Document("_id" -> ObjectId(), "name" -> "MongoDB"...)
Wie mutable.Document mit insertOne Methode verwenden? – LoranceChen
Achten Sie darauf, dass die Einfügung im neuen Treiber asynchron ist. Sie müssen also das Observable abonnieren oder in ein Future konvertieren und es verarbeiten ... – pianista
Warum die Methode collection.insertOne() kein veränderbares Dokument als Parameter in scala verwendet Treiber 1.1.1? – LoranceChen