Mongoose findOneAndUpdate с условием

#javascript #mongodb #mongoose

#javascript #mongodb #mongoose

Вопрос:

У меня есть простая модель, подобная этой,

 const userSchema = new mongoose.Schema({
    name:String,   
    personelID:Number,
    departments:{
        type:[String],
    },
})
  

Пользователь может работать с несколькими отделами. Для нового отдела сначала я управляю существующим массивом отделов, если он не включает, я нажимаю новый отдел.

В основном я могу сделать это с помощью

 User.findOne({personelID:ID},(err,usr)=>{
             if(err) return console.error(err); 
             if(usr.departments!==undefined){
                if(!usr.departments.includes(department))
                {
                    usr.departments.push(department);
                    usr.save();
                }
             }
})
  

Это работает без проблем. Но могу ли я сделать это с помощью более простого, подобного этому?

   User.findOneAndUpdate(
      {personelID:ID, 'departments is not include newDepartment'},
      {departments:departments.push(newDepartment)}
      (callback) => {}
      )
  

Ответ №1:

Вы можете поставить условие для отделов, не равных конкретному отделу, в части запроса, $ne также будет управлять условием в полях массива, если отдел не найден, тогда он будет нажимать, иначе он пропустит операцию нажатия.

 User.findOneAndUpdate(
    {
        personelID: ID,
        departments: {  $ne: department }
    },
    { $push: { departments: department } }
)