This is an excerpt from the Scala Cookbook (partially modified for the internet). This is a very short recipe, Recipe 16.7, “How to access the MongoDB document ‘ID’ field (_id
) with Casbah.”
Problem
You want to get the ID
field for a document you’ve inserted into a MongoDB collection in a Scala application.
Solution
Perform a query to get the document you want, and then call get("_ID")
on the resulting MongoDBObject
, like this:
basicDbObject.get("_id")
The following example shows how to get the ID
field from a DBObject
after inserting the object into the database. I first create a Stock
as usual, convert the Stock
to a MongoDBObject
, perform the insert, and then get the ID
value, which is added to the MongoDBObject
after the insert
operation is performed:
import com.mongodb.casbah.Imports._ import Common._ object InsertAndGetId extends App { val coll = MongoFactory.collection // get the _id field after an insert val amazon = Stock("AMZN", 220) val amazonMongoObject = buildMongoDbObject(amazon) coll.insert(amazonMongoObject) println("ID: " + amazonMongoObject.get("_id")) }
If you just need to get the ID
field from a MongoDBObject
after performing a query, the following complete example shows how to do that with a match
expression:
import com.mongodb.casbah.Imports._ object GetId extends App { val collection = MongoFactory.collection val query = MongoDBObject("symbol" -> "GOOG") collection.findOne(query) match { case Some(result) => println("ID: " + result.get("_id")) case None => println("Stock not found") } }
A match
expression is used in this example because the findOne(query)
will return None
if no matching documents are found in the collection. You can also use the usual getOrElse
and foreach
techniques to work with an Option
.
If you’ve been following along with the MongoDB recipes in this chapter, save those files with the names InsertAndGetId.scala and GetId.scala in the root directory of your project, and run them with sbt run
.
this post is sponsored by my books: | |||
#1 New Release |
FP Best Seller |
Learn Scala 3 |
Learn FP Fast |
See Also
- Recipe 20.6, “Using Scala’s Option/Some/None Pattern” for many examples of working with methods that return an
Option