Você provavelmente pode usar o operador posicional para identificar o elemento da matriz:
Então talvez algo como:
User.collection.update(
{ :_id => user.id, :matches => BSON::ObjectId('4e40238dbc9f6ec5a6000eed') },
{ :$set => { 'alert.matches.$' => matches } }
)
Mas, como observa Sergio, é difícil destrinchar a estrutura de seus documentos com base nas informações limitadas em sua pergunta.
Parece que mais informações chegaram depois que eu respondi e se parece com:
{ :$set => { 'alerts.$.matches' => ... } }
é o que você precisa. E você precisará incluir
:matches
na consulta para que $
tem algo a que se referir.