sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose-instansen .save() fungerar inte när det inbäddade arrayobjektet ändrades

Problemet är att mongoose inte vet att din array är modifierad.

Du kan använda 2 lösningar:

markModified

Denna funktion kommer att markera det inbäddade elementet som modifierat och tvinga fram en återlagring av det. Det kommer att säga åt mongoose att spara om detta element.

User.findById(userID).exec(function (err, doc) {
        let cardInfo = req.cardInfo
        let cardIndex = req.cardIndex
        doc["cards"][0] = cardInfo;
        console.log(doc)
/*  here I got right doc object as I requested
{
        "_id": "59f3bdd488f912234fcf06ab",
        "email": "[email protected]",
        "username": "test",
        "__v": 2,
        "cards": [
            {
                "testNo": "42424242424242"
            }
        ]
    }
*/
        doc.markModified('cards');
        doc.save(function (err) {
          if (err) {
            return res.json({
              success: false,
              msg: 'Card add error'
            });
          }
          res.json({
            success: true,
            msg: 'Successful updated card.'
          });
        });
})

Använd ett fullständigt schema.

För att undvika tricket markModified bör du beskriva innehållet på korten i ditt schema. På så sätt kommer mongoose att kunna avgöra om den behöver spara fältet eller inte.

Här är sättet att deklarera ditt schema korrekt :

const CardSchema = new Schema({
  testNo: String,
});

var UserSchema = new Schema({
    username: {
        type: String,
        unique: true,
        required: true
    },
    email: {
        type: String,
        unique: true,
        required: true
    },
    cards: [CardSchema]
});
module.exports = mongoose.model('User', UserSchema);

På detta sätt kommer mongoose att kunna upptäcka om ett värde på korten ändras och bara spara det ändrade föremålet.

Om du kan göra det (statiskt schema) är detta helt klart det bra sättet att göra det.



  1. Är Mongodb Aggregation-ramverket snabbare än kartlägga/minska?

  2. Redis Memory Optimization Cheat Sheet

  3. Hur konfigurerar du Embedded MongDB för integrationstestning i en Spring Boot-applikation?

  4. mongodb, sortering efter geoNear och datum?