MongoDB / Update operator ($set, $push, $inc)
Update operator ($set, $push, $inc)
updateOne ба updateMany-д өгөх өөрчлөлтийн хэсгийг update operator-уудаар тодорхойлно. Оператор сонголтоос шалтгаалан MongoDB document-ийн янз бүрийн хэсгийг өөр өөрөөр шинэчилнэ.
Талбарын операторууд (Field)
$set — утга тавих
$set нь талбарын утгыг шинэчилнэ. Талбар байхгүй бол шинээр нэмнэ.
javascript
// Нэг талбар өөрчлөх
db.users.updateOne({ username: "bold" }, { $set: { age: 26 } });
// Олон талбар нэгэн зэрэг өөрчлөх
db.users.updateOne(
{ username: "bold" },
{ $set: { age: 26, city: "Дархан", updatedAt: new Date() } },
);
// Nested талбар өөрчлөх (dot notation)
db.users.updateOne(
{ username: "bold" },
{ $set: { "profile.bio": "MongoDB хөгжүүлэгч" } },
);
$unset — талбар устгах
javascript
// phone талбарыг document-ээс устгах
db.users.updateOne(
{ username: "bold" },
{ $unset: { phone: "" } }, // утга нь хамаагүй, "" өгч болно
);
$inc — тоон утга нэмэх/хасах
$inc нь одоогийн утга дээр өгөгдсөн тоог нэмнэ. Сөрөг тоо өгвөл хасна.
javascript
// xp талбарт 10 нэмэх
db.users.updateOne({ username: "bold" }, { $inc: { xp: 10 } });
// Үзэлтийн тоо 1-ээр нэмэх
db.posts.updateOne({ _id: ObjectId("64abc123") }, { $inc: { viewCount: 1 } });
// stock-оос 3 хасах
db.products.updateOne({ _id: productId }, { $inc: { stock: -3 } });
$mul — үржүүлэх
javascript
// price-ийг 1.1-ээр үржүүлэх (10% нэмэгдүүлэх)
db.products.updateOne({ _id: productId }, { $mul: { price: 1.1 } });
$rename — талбарын нэр өөрчлөх
javascript
// "city" талбарыг "location" болгон нэрлэх
db.users.updateMany({}, { $rename: { city: "location" } });
Массивын операторууд (Array)
$push — массивт элемент нэмэх
javascript
// skills массивт "MongoDB" нэмэх
db.users.updateOne({ username: "bold" }, { $push: { skills: "MongoDB" } });
$each ашиглан нэг удаа олон элемент нэмж болно:
javascript
db.users.updateOne(
{ username: "bold" },
{ $push: { skills: { $each: ["Docker", "Git"] } } },
);
$pull — массиваас элемент устгах
javascript
// skills массиваас "PHP" устгах
db.users.updateOne({ username: "bold" }, { $pull: { skills: "PHP" } });
// Нөхцөлтэйгөөр устгах
db.users.updateOne(
{ username: "bold" },
{ $pull: { scores: { $lt: 50 } } }, // 50-аас бага score бүгдийг устгах
);
$addToSet — давхардалгүйгээр нэмэх
$push-тай адил боловч элемент аль хэдийн байвал нэмэхгүй.
javascript
// "JavaScript" аль хэдийн байвал давхар нэмэхгүй
db.users.updateOne(
{ username: "bold" },
{ $addToSet: { skills: "JavaScript" } },
);
$pop — массивын эхэн/төгсгөлийн элемент устгах
javascript
// Сүүлчийн элемент устгах (1)
db.users.updateOne({ username: "bold" }, { $pop: { skills: 1 } });
// Эхний элемент устгах (-1)
db.users.updateOne({ username: "bold" }, { $pop: { skills: -1 } });
Операторуудыг хослуулах
Нэг update дотор олон оператор нэгэн зэрэг ашиглаж болно:
javascript
// Хичээл дуусгасан хэрэглэгч шинэчлэх:
// — XP нэмэх
// — Дуусгасан хичээлийг жагсаалтад нэмэх
// — Сүүлд идэвхтэй байсан огноо тэмдэглэх
db.users.updateOne(
{ _id: userId },
{
$inc: { xp: 10 },
$addToSet: { completedLessons: "mongodb-07" },
$set: { lastActive: new Date() },
},
);
Дараагийн хичээлд:
deleteOne ба deleteMany ашиглан document-уудыг хэрхэн устгах талаар үзнэ.