MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Instancja Mongoose .save() nie działa po zmianie osadzonego obiektu tablicy

Problem polega na tym, że mangusta nie wie, czy twoja tablica została zmodyfikowana.

Możesz użyć 2 rozwiązań:

markModified

Ta funkcja oznaczy osadzony element jako zmodyfikowany i wymusi jego ponowne zapisanie. Powie mangusta, aby ponownie zapisać ten 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.'
          });
        });
})

Użyj pełnego schematu.

Aby uniknąć sztuczki markModified, powinieneś opisać zawartość kart w swoim schemacie. W ten sposób mangusta będzie w stanie określić, czy musi uratować pole, czy nie.

Oto sposób poprawnego zadeklarowania schematu:

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

W ten sposób mangusta będzie w stanie wykryć, czy wartość w kartach uległa zmianie i zapisać tylko zmodyfikowaną pozycję.

Jeśli możesz to zrobić (schemat statyczny), jest to oczywiście dobry sposób, aby to zrobić.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. jaki jest prawdziwy cel $ref (DBref) w MongoDb?

  2. Nie można znaleźć modułu '../build/Release/bson'] kod:'MODULE_NOT_FOUND' } js-bson:Nie udało się załadować rozszerzenia bson c++, używając czystej wersji JS

  3. BsonValue i niestandardowe klasy w MongoDB C# Driver

  4. Pola zapytań w kolekcji MongoDB.

  5. Jak sortowanie działa z zapytaniami `$or` i `$in` w MongoDB?