Dalam situasi saya perlu memperbarui bidang semua dokumen yang bersarang dalam array dalam model Mongoose.

Saya menambahkan dokumen bersarang baru dari gambar yang diunggah ke koleksi Pengguna dan saya perlu mengatur "is_available" dari semua dokumen sebelumnya menjadi salah dan hanya bidang "is_available" dari dokumen yang baru dimasukkan yang benar.

Yang saya cari dan temukan hanyalah tentang memperbarui dokumen bersarang dengan id atau filter tertentu. tetapi saya tidak menemukan cara untuk memperbarui bidang tertentu dari semua dokumen bersarang dari array dalam Model.

Model saya:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

var UsersSchema = new Schema({
  name: { type: String, default: "" },
  lastname: { type: String, default: "" },
  images: [{
    dir: { type: String },
    is_available: { type: Boolean }
  }]
});

var Users = mongoose.model("Users", UsersSchema, "users");
module.exports = Users;

Hasil sebenarnya:


{ 
    "_id" : ObjectId("5ce950aa4sw435ty503ab83b"), 
    "name" : "Sina", 
    "image" : [
        {
            "_id" : ObjectId("5cf4dd3da6b4gb6bcf9c6dc1"), 
            "dir" : "profiledirectory/804eafeaf8acc40a3d6.jpg", 
            "is_available" : true
        }, 
        {
            "_id" : ObjectId("5cf4fffs2419316bddffgg82"), 
            "dir" : "profiledirectory/d85b01ac40fa6b1a7c1.jpg", 
            "is_available" : true
        }, 
        {
            "_id" : ObjectId("5cf4ff334fhd316bef2fdt40"), 
            "dir" : "profiledirectory/512d9d19da7a4322b37.jpg", 
            "is_available" : true
        }
    ]
}

Hasil yang diharapkan:


{ 
    "_id" : ObjectId("5ce950aa4sw435ty503ab83b"), 
    "name" : "Sina", 
    "image" : [
        {
            "_id" : ObjectId("5cf4dd3da6b4gb6bcf9c6dc1"), 
            "dir" : "profiledirectory/804eafeaf8acc40a3d6.jpg", 
            "is_available" : false
        }, 
        {
            "_id" : ObjectId("5cf4fffs2419316bddffgg82"), 
            "dir" : "profiledirectory/d85b01ac40fa6b1a7c1.jpg", 
            "is_available" : false
        }, 
        {
            "_id" : ObjectId("5cf4ff334fhd316bef2fdt40"), 
            "dir" : "profiledirectory/512d9d19da7a4322b37.jpg", 
            "is_available" : true
        }
    ]
}
Code Snippet:

let updateQuery = {
  $set: { 'image.$.is_available': false },
  $push: {
    image: [
      {
        dir: "profiledirectory/558bb6938ecd54bde556af122a4.jpg",
        is_available: true
      }
    ]
  }
}


let findQuery = { _id: req.body.user_id }

Users.findOneAndUpdate(findQuery,
  updateQuery, function (err, doc) {
    if (err) {
      res.send(err.message)
    } else {
      res.send('successful')
    }
  })
0
Sina 3 Juni 2019, 16:03

1 menjawab

Setelah Anda mengunggah file, Anda harus menemukan pengguna

  // after upload image 

  User.findOne({_id:req.user._id}).lean().exec((err,user)=>{
        if(!err && user){
              // setting all previous images to false 
              user.image.forEach(image=>{
                    image.is_available=false;
              });
              // now pushing new uploded item to image array
        let newImage={"dir" : "path of uploaded item here"  , "is_available" : true};

              user.image.push(newImage);
              user.save((err,updated)=>{
                   if(!err && updated){ 
                     return res.status(200).json({status:"success",message:"User updated"});
                   }
              });
        }
  });
0
Saurabh Mistry 3 Juni 2019, 13:23