Query database records

The Collection method takes the name of a table in the database and returns a value that satisfies the db.Collection interface:

booksTable := sess.Collection("books")

One of the methods defined by the db.Collection interface is Find.

Use Find to search for specific records within the collection hierarchy. Find returns a db.Result object, which is delimited by the condition passed to Find and can contain zero, one, or many database records.

The db.Result interface works the same on all supported databases.

The following query fetches and maps all the records from the “books” table:

var books []Book

res := booksTable.Find()
err := res.All(&books)

You can build the query to return records in different ways, such as sorted by title (descending order):

var books []Book

res := booksTable.Find().OrderBy("-title")
err := res.All(&books)

Use One instead of All if you want to retrieve a single record from the set:

var book Book

res := booksTable.Find(db.Cond{"id": 4})
err := res.One(&book)

You can also determine the total number of records in the result set with Count:

res := booksTable.Find()

total, err := res.Count()
...

Depending on your database type, you have many options for defining queries.

Query builder and raw SQL

In the particular case of adapters for SQL databases, you can also choose to use a query builder (for more control over your query):

q := sess.SQL().Select().From("books")

var books []Book
err := q.All(&books)

… or raw SQL (for absolute control over your query):

rows, err := sess.SQL().Query("SELECT * FROM books")
// rows is a regular *sql.Rows object.