MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie schreibe ich eine Aktualisierungsabfrage in Mongodb für tief verschachtelte Arrays?

Probieren Sie den positional $ aus Operator in Ihrem Update, der als Platzhalter für das erste Element fungiert, das mit dem Abfragedokument übereinstimmt, und wenn Sie ihn verwenden, stellen Sie sicher, dass die cards Array-Feld muss als Teil des Abfragedokuments erscheinen. In Ihrem Fall möchten Sie eine card hinzufügen Dokument in die 'cards' Array, aber nur wenn die cardId existiert nicht:

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) { ... });