Collection trong MongoDB

Sau khi kết nối vào CSDL trong MongoDB, bạn cần làm việc với Collection. Vậy hãy cũng tìm hiểu cách thức làm việc với Collection trong MongoDB như thế nào.

Tạo Collection

Sử dụng câu lệnh db.createCollection() để tạo Collection trong mongo shell

Cú pháp:
db.createCollection(<name>, 
  { 
    capped: <boolean>,
    autoIndexId: <boolean>,
    size: <number>,
    max: <number>,
    storageEngine: <document>,
    validator: <document>,
    validationLevel: <string>,
    validationAction: <string>,
    indexOptionDefaults: <document>,
    viewOn: <string>,
    pipeline: <pipeline>,
    collation: <document>,
    writeConcern: <document>
  } )
Tham số Kiểu dữ liệu Mô tả
name string Tên của Collection cần tạo
capped boolean Không bắt buộc. Để tạo Collection có giới hạn nếu giá trị là true (đúng). Nếu xác định là true, bạn cũng phải thiết lập giá trị lớn nhất của kích thước trong trường size.
size number Không bắt buộc. Xác định giá trị lớp nhất tính theo byte để giới hạn cho Collection. Khi Collection đạt đến kích thước lớn nhất thì MongoDB sẽ xoá những document (tài liệu) cũ để tạo khoảng trống cho document mới.
max number Không bắt buộc. Xác định số lượng lớn nhất của document được phép trong giới hạn Collection. Để giới hạn Collection thì nên sử dụng thuộc tính này để xác định giới hạn. Nếu một Collection đạt đến kích thước giới hạn số lượng document tối đa, MongoDB sẽ xoá các document cũ để đảm bảo giới hạn tối đa đã được xác định
autoIndexId boolean Không bắt buộc. Xác định là false để vô hiệu hoá việc tự động đánh index (chỉ mục) cho trường _id. Bắt đầu từ MongoDB 4.0 trở về sau, bạn không thể thiết lập được tuỳ chọn autoIndexIdfalse khi tạo Collection trong database
usePowerOf2Sizes boolean Không bắt buộc. Chỉ có sẵn trong bộ lưu trữ MMAPv1
noPadding boolean Không bắt buộc. Chỉ có sẵn trong bộ lưu trữ MMAPv1
Giá trị mặc định là false
storageEngine document Không bắt buộc. Chỉ có sẵn trong bộ lưu trữ WiredTiger
validator document Không bắt buộc. Cho phép xác định các quy tắc hoặc biểu thức xác nhận hợp lệ cho Collection
validationLevel string Không bắt buộc. Xác định cách MongoDB áp dụng quy tắc hợp lệ cho các document đã tồn tại trong lúc cập nhật
validationAction string Không bắt buộc. Xác định xem sẽ thông báo lỗi hay đưa ra cảnh báo khi các document không hợp lệ được thêm vào
indexOptionDefaults document Không bắt buộc. Cho phép người dùng xác định cấu hình mặc định cho index (chỉ mục) trong lúc tạo Collection
viewOn string Không bắt buộc. Tên của Collection hoặc khung nhìn (view) nguồn trong lúc tạo khung nhìn. Tên không phải là namespace (không gian tên) đầy đủ của Collection hay khung nhìn, tức là không bao gồm tên CSDL như trong cùng một CSDL trong lúc khung nhìn được tạo
pipeline array Không bắt buộc. Là một mảng tập hợp các đoạn đường ống. Câu lệnh db.createView() tạo khung nhìn bằng cách áp dụng các đoạn đã được chỉ định cho Collection hoặc khung nhìn trong thuộc tính viewOn
collation document Không bắt buộc. Xác định đối chiếu mặc định cho Collection
writeConcer document Không bắt buộc. Một document diễn tả mối liên hệ bằng văn bản cho các thao tác. Thường bỏ qua thuộc tính này, sử dụng chế độ ghi mặc định
Ví dụ:
  • Tạo Collection đơn giản
    db.createCollection("students")
  • Tạo Collection với xác định kích thước tối đa là 1MB
    db.createCollection("students", {
        capped: true,
        size: 1024
    })​
  • Tạo Collection với xác định số lượng document (tài liệu) tối đa là 100
    db.createCollection("students", { max: 100 })​

Chèn dữ liệu vào trong Collection

Để chèn dữ liệu vào trong Collection chúng ta có thể sử dụng các phương thức insertOne(), insertMany(), insert(), save()

Cú pháp:
db.COLLECTION_NAME.insertOne(document)

db.COLLECTION_NAME.insertMany([document])

db.COLLECTION_NAME.insert(document)

db.COLLECTION_NAME.save(document)
Ví dụ:
  • Chèn một tài liệu (document) vào trong Collection
    • Sử dụng phương thức insertOne()
      db.students.insertOne({student_id: "S2020.0016", first_name: "Phạm", middle_name: "Văn", last_name: "Được", birthday: "11/11/2002", gender: "M", gpa: 9, note: ""})
    • Sử dụng phương thức insert()
      db.students.insert({student_id: "S2020.0017",first_name: "Nguyễn",middle_name: "Văn",last_name: "Nam",birthday: "12/12/2002",gender: "M", gpa: 7.5, note: ""})​
    • Sử dụng phương thức save()
      db.students.save({student_id:"S2020.0018",first_name:"Hoàng",middle_name:"Văn",last_name:"Định",birthday:"02/12/2002",gender:"M",gpa:5.5,note:""})
  • Chèn nhiều tài liệu vào trong Collection
    • Sử dụng phương thức insertMany()
      db.students.insertMany([{ student_id: "S2020.0019", first_name: "Trần", middle_name: "Văn", last_name: "Hải", birthday: "10/07/2002", gender: "M", gpa: 8, note: ""}, { student_id: "S2020.0020", first_name: "Phạm", middle_name: "Thị", last_name: "Hương", birthday: "12/06/2002", gender: "F", gpa: 8.5, note: ""}])
    • Sử dụng phương thức insert()
      db.students.insert([{ student_id: "S2020.0021", first_name: "Trần", middle_name: "Văn", last_name: "Quang", birthday: "03/07/2002", gender: "M", gpa: 6.5, note: ""}, { student_id: "S2020.0022", first_name: "Nguyễn", middle_name: "Thị", last_name: "Hương", birthday: "12/09/2002", gender: "F", gpa: 6, note: ""}])
    • Sử dụng phương thức save()
      db.students.save([{ student_id: "S2020.0023", first_name: "Hoàng", middle_name: "Văn", last_name: "Hoà", birthday: "10/03/2002", gender: "M", gpa: 9.5, note: ""}, { student_id: "S2020.0024", first_name: "Trần", middle_name: "Thị", last_name: "Hoa", birthday: "01/04/2002", gender: "F", gpa: 7, note: ""}])​

Gợi ý: Để sử dụng linh hoạt và hiệu quả chúng ta nên sử dụng phương thức insert() để chèn dữ liệu vào Collection.

Truy vấn dữ liệu từ Collection

Để truy vấn lấy dữ liệu từ Collection của MongoDB bạn có thể sử dụng phương thức find()

Cú pháp

db.COLLECTION_NAME.find()

Ví dụ

db.students.find()

Để hiển thị kết quả trả về có định dạng bạn có thể sử dụng thêm phương thức pretty()

db.students.find().pretty()

Cập nhật tài liệu

MongoDB sử dụng 2 phương thức update() và save() để thực hiện cập nhật tài liệu ở bên trong một Collection. Phương thức update() cập nhật các giá tgrij trong tài liệu hiện có trong khi phương thức save() thay thế tài liệu hiện có bằng tài liệu được truyền trong phương thức save()

Cú pháp:
db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)
db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})​
Ví dụ:
  • Sử dụng phương thức update() để cập nhật một tài liệu:
    db.students.update({student_id: "S2020.0015"}, {$set: {student_id: "S2020.0016", first_name: "Phạm"}})​

    hoặc

    db.students.update({student_id: "S2020.0016"}, {$set: {student_id: "S2020.0015", first_name: "Phạm"}}, {multi:false})
  • Sử dụng phương thức update() để cập nhật nhiều tài liệu:
    db.students.update({student_id: "S2020.0016"}, {$set: {student_id: "S2020.0015", first_name: "Phạm"}}, {multi:true})​
  • Sử dụng phương thức save() để thay thế một tài liệu nếu đã tồn tại giá trị thuộc tính _id, ngược lại chuyển sang thêm mới tài liệu)
    db.students.save({"_id" : ObjectId("5e8f5546fb03adf70ac477b3"), first_name: "Nguyễn", last_name:"Khoái"})​

Xoá tài liệu

MongoDB sử dụng phương thức remove() để xoá tài liệu ra khỏi một Collection.

Cú pháp:
db.COLLECTION_NAME.remove(DELLETION_CRITTERIA[, {justOne: d}])​
  • DELLETION_CRITTERIA: Chỉ ra tiêu chí để xoá tài liệu
  • justOne: Không bắt buộc. Nếu được đặt thành true hoặc 1, thì chỉ xóa một tài liệu
Ví dụ:
  • Xoá 1 tài liệu
    db.students.remove({"first_name": "Trần"}, {justOne:true})
    hoặc xoá dựa vào thuộc tính _id
    db.students.remove({"_id" : ObjectId("5e8f5546fb03adf70ac477b3")})​
  • Xoá nhiều tài liệu
    db.students.remove({"first_name": "Phạm"})​

    hoặc

    db.students.remove({"first_name": "Phạm"}, {justOne:false})