public function whereElemMatch($field, $expression)
{
if (is_callable($expression)) {
$expression = call_user_func($expression, $this->expression());
}
if ($expression instanceof Expression) {
$expression = $expression->toArray();
} elseif (!is_array($expression)) {
throw new Exception('Wrong expression passed');
}
return $this->where($field, array('$elemMatch' => $expression));
}