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.