Giới thiệu
Trong MongoDB shell (mongo shell), bạn có thể gán kết quả truy vấn vào biến JavaScript bằng từ khóa var để sử dụng lại sau.
Cú pháp
var tenBien = db.tenCollection.find().limit(1);
// Hoặc cho một document cụ thể
var tenBien = db.tenCollection.findOne({ _id: ObjectId("...") });
Ví dụ minh họa
1. Tạo collection
> db.luuKetQua.insertOne({ "TenKhachHang": "Chris", "TuoiKhachHang": 23 });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9ecf8fd628fa4220163b8d") }
> db.luuKetQua.insertOne({ "TenKhachHang": "Robert", "TuoiKhachHang": 21 });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9ecf97d628fa4220163b8e") }
> db.luuKetQua.insertOne({ "TenKhachHang": "Sam", "TuoiKhachHang": 25 });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9ecf9ed628fa4220163b8f") }
> db.luuKetQua.insertOne({ "TenKhachHang": "Mike", "TuoiKhachHang": 26 });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9ecfa8d628fa4220163b90") }
2. Lưu document đầu tiên vào biến
> var ketQuaTruyVan = db.luuKetQua.find().limit(1);
3. In biến ra màn hình
> ketQuaTruyVan;
{ "_id" : ObjectId("5c9ecf8fd628fa4220163b8d"), "TenKhachHang" : "Chris", "TuoiKhachHang" : 23 }
Phân biệt: find().limit(1) vs findOne()
| Phương thức | Trả về | Khi dùng |
|---|---|---|
find().limit(1) | Cursor (có thể iterate) | Cần dùng cursor methods (forEach, map, toArray...) |
findOne() | Document (object đơn lẻ hoặc null) | Chỉ cần 1 document, code đơn giản hơn |
Ví dụ với findOne() (Khuyên dùng)
> var doc = db.luuKetQua.findOne({ "TenKhachHang": "Chris" });
> doc;
{ "_id" : ObjectId("5c9ecf8fd628fa4220163b8d"), "TenKhachHang" : "Chris", "TuoiKhachHang" : 23 }
// Truy cập field
> doc.TenKhachHang;
Chris
> doc.TuoiKhachHang;
23
Sử dụng biến trong script phức tạp
// Script: cap_nhat_tuoi.js
var khachHang = db.khachHang.findOne({ email: "user@example.com" });
if (khachHang) {
var tuoiMoi = khachHang.tuoi + 1;
db.khachHang.updateOne(
{ _id: khachHang._id },
{ $set: { tuoi: tuoiMoi, capNhatLuc: new Date() } }
);
print("Đã cập nhật tuổi cho " + khachHang.TenKhachHang + " thành " + tuoiMoi);
} else {
print("Không tìm thấy khách hàng");
}
Lưu ý quan trọng
- Biến chỉ tồn tại trong **phiên làm việc shell hiện tại**
- Không thể chia sẻ biến giữa các session shell khác nhau
- Trong script file (.js), biến hoạt động bình thường
- Dùng
consthoặclet(ES6) thay vìvartrong script hiện đại