ใน Mongo Shell สามารถใช้ตัวแปร JavaScript (var/let/const) เพื่อเก็บค่าและนำไปใช้ใน query ได้ ทำให้โค้ดอ่านง่ายและ reuse ค่าได้
สร้างคอลเลกชันและข้อมูลตัวอย่าง
> db.demo107.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ee1b19fd5fd66da214471") }
> db.demo107.insertOne({"Name":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ee1b49fd5fd66da214472") }
> db.demo107.insertOne({"Name":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ee1b89fd5fd66da214473") }
แสดงข้อมูลทั้งหมด
> db.demo107.find();
ผลลัพธ์:
{ "_id" : ObjectId("5e2ee1b19fd5fd66da214471"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2ee1b49fd5fd66da214472"), "Name" : "Bob" }
{ "_id" : ObjectId("5e2ee1b89fd5fd66da214473"), "Name" : "David" }
ใช้ Variable ใน Query
> var firstName = "Bob";
> db.demo107.find({"Name": firstName});
ผลลัพธ์
{ "_id" : ObjectId("5e2ee1b49fd5fd66da214472"), "Name" : "Bob" }
คำอธิบาย:
var firstName = "Bob": ประกาศตัวแปรใน Mongo Shell (JavaScript context){"Name": firstName}: ใช้ตัวแปรใน query object โดยตรง- ตัวแปรจะคงค่าไว้ใน shell session จนกว่าจะออกหรือ assign ใหม่
การใช้งานขั้นสูง
1. เก็บ ObjectId ไว้ใช้ซ้ำ
var userId = ObjectId("5e2ee1b49fd5fd66da214472");
db.demo107.find({_id: userId});
db.demo107.updateOne({_id: userId}, {$set: {Name: "Robert"}});
2. เก็บ Query Object ใช้ซ้ำ
var query = {Name: {$in: ["Chris", "Bob"]}};
db.demo107.find(query);
db.demo107.countDocuments(query);
3. ใช้ใน Aggregate Pipeline
var matchStage = {$match: {Name: "Bob"}};
var projectStage = {$project: {Name: 1, _id: 0}};
db.demo107.aggregate([matchStage, projectStage]);
4. Loop และ Batch Operations
var names = ["Chris", "Bob", "David"];
names.forEach(function(name) {
db.demo107.updateOne(
{Name: name},
{$set: {LastUpdated: new Date()}}
);
});
Scope ของตัวแปร
var: function-scoped หรือ global ใน shelllet,const: block-scoped (ES6, รองรับใน Mongo Shell ใหม่)- ตัวแปรหายเมื่อปิด shell หรือเริ่ม session ใหม่
หมายเหตุ: ใน Application code (Node.js, Python, etc.) ให้ใช้ตัวแปรของภาษานั้นแทน ไม่ใช่ Mongo Shell variables