What you put in search parameter (called domain) it's your where criteria.
You really should read the ORM documentation about domain search
The domain it's written in Polish Notation system, because you can normalize (stringify) the search string (useful from client-side) - more in this post.
For your example:
self.env['my.model'].search([('id', '=', self.id)])
The same (searching by id or a list of ids) can also be done using special browse method like this
self.env['my.model'].browse(self.id)
self.env['my.model'].browse([1, 2, 3])
You have to be careful because browse doesn't check if the record really exists in the DataBase, if you want to be sure it exists, you can use exists() method after it, like this:
self.env['my.model'].browse([1, 2, 3]).exists()
By default, if you write multiple conditions, they are treated as AND
self.env['my.model'].search([('my_field', '=', 'value'), ('my_other_field', '!=', False)])
To build more complex searches, you really have to check documentation, understand how to write complex domains using RPN (with ORs and ANDs) and look in Odoo code for more examples