Как я могу вставить новый объект в Mongo и получить _id
с вставленным документом?Вставка объекта в Mongo с выходом _id
Желаемая поведение:
val _id: String = coll.insert(someObj)
// _id = "_id" вставленного док
Как я могу вставить новый объект в Mongo и получить _id
с вставленным документом?Вставка объекта в Mongo с выходом _id
Желаемая поведение:
val _id: String = coll.insert(someObj)
// _id = "_id" вставленного док
Вам не нужно искать. Когда вы вставляете новый объект, его идентификатор создается на стороне клиента , это означает, что вы уже знаете его перед отправкой.
Отсюда: http://docs.mongodb.org/manual/reference/object-id/
ObjectId представляет собой тип BSON 12 байт, построено с использованием:
значение 4 байта, представляющее секунд с началом эпохи Unix, идентификатора машины 3-байтовой , 2-байтовый идентификатор процесса и 3-байтовый счетчик, начиная со случайного значения.
Итак, при запросе на вставку нового документа вы укажете его уже. Обычно вы либо используете существующий идентификатор, либо генерируете новый, используя BSONObjectID.generate.
Вот быстрый проект, используя пользовательский класс для отображения (в этом примере я использовал reactivemongo, не Casbah):
case class Account(
id: Option[BSONObjectID],
firstName: String,
lastName: String)
А потом сделать следующее в записывающем:
implicit object AccountBSONWriter extends BSONDocumentWriter[Account] {
def write(account: Account): BSONDocument =
BSONDocument(
"_id" -> account.id.getOrElse(BSONObjectID.generate),
"first_name" -> account.firstName,
"last_name" -> account.lastName)
}
Но если он сгенерирован на стороне клиента, то это * возможно * создать не уникальное значение, не так ли? –
Это правильно. GUID и другие UNIQUE-идентификаторы никогда не являются уникальными, они используют Mac-адрес, например, для генерации уникального идентификатора, однако, если кто-то устанавливает тот же Mac, то вы можете иметь такое же значение. Однако они также используют время, дату и т. Д. Это делает практически невозможным не уникальность. То же самое для MongoDB, вероятность того, что у вас будет идентичное оборудование в вашем кластере, крайне редко, если не невозможно. Мне нужно будет изучить их исходный код, чтобы найти то, что именно они используют в качестве идентификатора машины, но я думаю, что это довольно надёжно. Есть сайты с миллиардами записей ... –
многие драйверы устанавливают '_id 'документа, который вы вставили. – WiredPrairie
Не могли бы вы указать мне на «Касбаху»? –
Попробуйте MongoDBObject.get ("_ id"), может работать. –