Dúfam, že dostanem dokument ObjectId
ktoré sa práve používajú insertOne
.
Podľa môjho názoru je cesta generovaná _id na strane klienta, ďalším spôsobom je dotaz pomocou zadávacieho poľa s dokumentom. Ktorá metóda je lepšia alebo máte iné?
PS: Viem, že ObjectId v mongo generuje s informáciami o strojoch a čase.
Jedným slovom, som len diviť, že hovor o mongo ObjectId by mal generovať na klientovi alebo mongod server znamená?
odpovede:
1 pre odpoveď č. 1Ako dokument MongoDB špecifikuje, ak používate prenosný dokument, mali by ste vrátiť dokument s _id vytvoreným MongoDB automaticky, ak ho neposkytnete.
Vložiť MongoDB -> Pozri varovnú časť
Ako viete v programe Scala väčšinu času pracujeme s implicitnými objektmi. To je dobré, pretože vyhnite sa závadám spôsobeným vedľajšími účinkami.
Napríklad, ak spojíte dva zoznamy, vyzíska nový zoznam a to isté sa stáva aj pri vkladaní kľúča do mapy a vráti sa nová mapa. Ako oposite v iných jazykoch ako Java, budete mať len jeden objekt (ukazovateľ), ktorý by zmenil jeho vnútorný stav.
Takže ak použijete nezmeniteľný dokument spoločnosti Mongo:
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" by bolo nemožné (takže nemáte _id autogenerovanú spoločnosťou Mongo).
Ak však používate:
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)...
Po vložení budete mať vo vašom dokumente "doc" pole _id.
Iným spôsobom, ako ste povedali, je poskytnúť vždy ObjectId pomocou niečoho ako:
val doc: Document = Document("_id" -> ObjectId(), "name" -> "MongoDB"...)