MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Instance luwak .save() tidak berfungsi saat objek array yang disematkan diubah

Masalahnya adalah luwak tidak tahu bahwa array Anda dimodifikasi.

Anda dapat menggunakan 2 solusi :

markModified

Fungsi ini akan menandai elemen yang disematkan sebagai dimodifikasi dan memaksa penyimpanan ulang. Ini akan memberi tahu luwak untuk menyimpan ulang elemen ini.

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

Gunakan skema lengkap.

Untuk menghindari trik markModified, Anda harus menjelaskan isi kartu dalam skema Anda. Dengan cara ini luwak akan dapat menentukan apakah perlu menyimpan bidangnya atau tidak.

Berikut cara mendeklarasikan skema dengan benar :

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

Dengan cara ini, luwak akan dapat mendeteksi jika nilai di dalam kartu berubah dan hanya menyimpan item yang dimodifikasi.

Jika Anda dapat melakukannya (skema statis), ini jelas merupakan cara yang baik untuk melakukannya.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Masalah izin Pymongo untuk sisipan yang aman

  2. Mengapa Mongoose memiliki skema dan model?

  3. Mongodb memperbarui elemen spesifik dari subarray

  4. $agregasi segi dalam monogdb

  5. Bagaimana menemukan apakah ada titik di mana poligon