null 데이터에 대한 update 를 진행할 때 주의할 점을 알게 됩니다.
use test
db.employees.insertOne({
name: "lake",
age: 21,
dept: "Database",
joinDate: new ISODate("2022-10-01"),
salary: 400000,
bonus: null
})
db.employees.insertOne({
name: "ben",
age: 23,
dept: "Network",
joinDate: new ISODate("2001-10-01"),
salary: 1000000,
})
위와 같은 데이터가 있습니다. 보너스를 지급할 대상이 bonus 필드가 null 인 직원이라 해봅시다.
db.employees.updateMany({
resignationDate: {
$exists: false
},
joinDate: {
$exists: true
},
bonus: null
}, {
$set: {
bonus: 10000
}
})
퇴사하지 않았고, bonus 필드가 null 인 유저의 bonus를 10000으로 지정합니다. 결과는요? bonus 필드가 존재하지 않는 경우도 null
{ _id: ObjectId("640730ba77ec14b4b106b6c4"), name: 'lake', age: 21, dept: 'Database', joinDate: ISODate("2022-10-01T00:00:00.000Z"), salary: 400000, bonus: 10000 }, { _id: ObjectId("640730ba77ec14b4b106b6c5"), name: 'ben', age: 23, dept: 'Network', joinDate: ISODate("2001-10-01T00:00:00.000Z"), salary: 1000000, bonus: 10000 } ]
db.employees.updateMany({
resignationDate: {
$exists: false
},
joinDate: {
$exists: true
},
bonus: {
$exists: true
}
}, {
$set: {
bonus: 10000
}
})
or
db.employees.updateMany({
$and: [
{ resignationDate: { $exists: false } },
{ joinDate: { $exists: true } },
{ bonus: { $exists: true } },
{ bonus: null }
]
},
{ $set: { bonus: 10000 } }
)