Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cách lưu kết quả truy vấn (một tài liệu) vào biến trong MongoDB Shell

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ứcTrả 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 const hoặc let (ES6) thay vì var trong script hiện đại