Casbah query DSL

Using DBObject instances to express queries can be very verbose and somewhat difficult to read. Casbah provides a DSL to express queries much more succinctly. For instance, to get all the documents with the github_id field between 20 and 30, we would write the following:

scala> collection.find("github_id" $gte 20 $lt 30).toList
List[com.mongodb.casbah.Imports.DBObject] = List({ "_id" : { "$oid" : "562e922546f953739c43df0f"} , "github_id" : 23 , "login" : "takeo" , "repos" : ...

The operators provided by the DSL will automatically construct DBObject instances. Using the DSL operators as much as possible generally leads to much more readable and maintainable code.

Going into the full details of the query DSL is beyond the scope of this chapter. You should find it quite easy to use. For a full list of the operators supported by the DSL, refer to the Casbah documentation at http://mongodb.github.io/casbah/3.0/reference/query_dsl/. We summarize the most important operators here:

Operators

Description

"login" $eq "mojombo"

This selects documents whose login field is exactly mojombo

"login" $ne "mojombo"

This selects documents whose login field is not mojombo

"github_id" $gt 1 $lt 20

This selects documents with github_id greater than 1 and less than 20

"github_id" $gte 1 $lte 20

This selects documents with github_id greater than or equal to 1 and less than or equal to 20

"login" $in ("mojombo", "defunkt")

The login field is either mojombo or defunkt

"login" $nin ("mojombo", "defunkt")

The login field is not mojombo or defunkt

"login" $regex "^moj.*"

The login field matches the particular regular expression

"login" $exists true

The login field exists

$or("login" $eq "mojombo", "github_id" $gte 22)

Either the login field is mojombo or the github_id field is greater or equal to 22

$and("login" $eq "mojombo", "github_id" $gte 22)

The login field is mojombo and the github_id field is greater or equal to 22

We can also use the dot notation to query arrays and subdocuments. For instance, the following query will count all the users who have a repository in Scala:

scala> collection.find("repos.language" $eq "Scala").size
Int = 30
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.133.134.151