sql >> Database >  >> NoSQL >> MongoDB

Mongoose-instantie .save() werkt niet wanneer ingesloten array-object is gewijzigd

Het probleem is dat mangoesten niet weten dat je array is aangepast.

U kunt 2 oplossingen gebruiken:

markModified

Deze functie markeert het ingesloten element als gewijzigd en dwingt het opnieuw op te slaan. Het zal mangoest vertellen om dit element opnieuw op te slaan.

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

Gebruik een volledig schema.

Om de markModified-truc te vermijden, moet je de inhoud van kaarten in je schema beschrijven. Op deze manier kan mangoest bepalen of het veld moet worden opgeslagen of niet.

Dit is de manier om uw schema correct te declareren:

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);

Op deze manier kan mangoest detecteren of een waarde in kaarten is gewijzigd en alleen het gewijzigde item opslaan.

Als je het kunt doen (statisch schema), is dit duidelijk de goede manier om het te doen.



  1. Hoe vind je een subveld in Mongo zonder het bovenliggende veld te kennen?

  2. toegang krijgen tot subdocumenten op Rails 3 met Mongoid

  3. Mongodb 2.4 2dsphere-query's erg traag (met $geoIntersects)?

  4. Sane standaardwaarden voor MongoDB op OSX?