How to Return Just the Value in MongoDB

When you use methods such as find() or findOne() in MongoDB, by default you get the whole document returned. And if you use projections, you can return specific key/value pairs.

But what if you only want the value?

You can extract the value of a field by appending that field’s name to your query when using findOne().

Example

Suppose we have a collection called products with the following documents:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }

If we wanted to return the first document’s product, we could do the following:

db.products.findOne().product

Result:

Bat

Note that we used the findOne() method. This technique doesn’t work on the find() method. The findOne() method returns a single document, whereas the find() method merely returns a cursor to the document.

If we wanted to return the array we could do this:

db.products.findOne().sizes

Result:

[ "S", "M", "L" ]

And we can get an array value by referencing its index:

db.products.findOne().sizes[0]

Result:

S

Arrays are zero-based, and so 0 references the first element in the array, 1 references the second element, 2 the third, and so on.

Specific Document

By default, the findOne() method returns the first document in the collection. We can select a different document by specifying passing a query as the first argument.

I say “first argument” because findOne() also accepts a projection argument as an optional second argument.

db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes

Result:

[ "S", "L", "XL" ]

In this case I added a projection argument, but it had no effect on the result. But it would have had an effect if I’d specified a value of 0. That would have resulted in nothing being returned.

Embedded Documents

You can use dot notation to return values from embedded documents

Example document:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20
	}
}

We could do the following to return a value from the embedded document:

db.pets.findOne().details.type

Result:

Dog