#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 } }
)