Você normalmente faria isso usando o operador posicional
$
, conforme descrito na resposta a esta pergunta:Atualizar campo na matriz de elementos exata no MongoDB
Infelizmente, no momento, o operador posicional suporta apenas um nível de matriz de correspondência.
Há um tíquete JIRA para o tipo de comportamento que você deseja:https://jira.mongodb .org/browse/SERVER-831
Caso você possa fazer
Switches
em um objeto, você poderia fazer algo assim:db.colection.update(
{
_id: ObjectId("561ad881755a021904c00fb5"),
"Switch.Ports.PortNumber": 5
},
{
$set: {
"Switch.Ports.$.Status": "Empty"
}
}
)