Vyzkoušejte positional $
operátor ve vaší aktualizaci, který funguje jako zástupný symbol pro první prvek, který odpovídá dokumentu dotazu, a když jej používáte, ujistěte se, že cards pole pole se musí objevit jako součást dokumentu dotazu. Ve vašem případě byste chtěli přidat card dokument do 'cards' pole, ale pouze pokud cardId neexistuje:
var query = {
"cardInfo.cards.cardId": { "$nin": ["somecardid"] }
};
var update = {
"$push": {
"cardInfo": { "customerId": "25934285649875" },
"cardInfo.$.cards": {
cardId: "somecardid",
cardType: "type",
createdAt: new Date().toISOString(),
isActive: true
}
}
};
Customer.update(query, update, function (err, result) { ... });