Hướng dẫn dùng mongodb json trong PHP
Giới thiệu: MongoDB được xây dựng với các quy cách và cấu trúc câu lệnh dựa trên javascript, cái này sẽ ko nói sâu, ai có nhu cầu truy cập vào CLI của MongoDB thông qua lệnh mongo thì tự nghiên cứu nhé. MongoDB có database, mỗi database có nhiều collection, và mỗi collection chứa nhiều document. Lưu ý là document ko cần thiết phải giống nhau về cấu trúc, thích vứt gì vào cũng đc. Nếu so sánh với RDBMS, thì database tương đương database, collection tương đương với table, document tương đương với row. Cơ chế của mongo là lưu tất cả dữ liệu trên đĩa, cache index và một số dữ liệu hay dùng trên RAM (so với Redis là memory-mapped, tức là backup dữ liệu trên đĩa và lưu tất cả dữ liệu trên RAM). MongoDB chạy trên hệ thống 32bit bị giới hạn tổng dữ liệu là 2GB, giới hạn này ko có trên hệ thống 64bit. Yêu cầu: Lưu ý: Tất cả các đoạn lệnh PHP trong bài viết đều nằm trong cặp thẻ Kết nối đến DB: PHP:
hoặc nếu có authen: PHP:
PHP Mongo có thể connect đc đến unix socket bằng string connection sau: mongodb:///tmp/mongodb.sock. Nhưng thử nghiệm trong nhiều trường hợp ko connect đc, éo hiểu tại sao (trong khi redis, mariadb vẫn qua unix socket bình thường). Thế nên khuyến cáo là chỉ connect qua TCP. Chọn database: PHP:
Chọn collection: PHP:
Insert bản ghi, ở đây mình dùng stdClass, nhưng mọi ng` cũng có thể tự define entity class riêng của mình, hoặc sử dụng array associative, nên sử dụng array assoc, mình dùng stdClass vì quen: PHP:
Bam, xong! Nếu xong trong mongo shell, thì cái item kia sẽ có dạng cấu trúc sau: Code (text):
Tất cả các item trong MongoDB đều có một attribute _id. Nếu ko gán giá trị cho attribute này lúc insert, thì mặc định MongoDB sẽ gán một object MongoID vào. Tốt nhất là lúc insert cứ gán vào, vì nếu ko gán, select bằng attribute _id này rất khó, trừ trường hợp ko select bằng _id. Lưu ý là MongoDB phân biệt rõ ràng kiểu int và string, vì vậy nên ép về đúng kiểu lúc insert để tiện đường sau này. Cái này là rút ra từ kinh nghiệm bản thân Update: PHP:
Query: Tìm nhiều bản ghi: PHP:
Lưu ý: cách này trả về MongoCursor, chứ ko phải array, thế nên phải dùng foreach để chạy qua từng item một. hoặc dùng cách này để không phải dùng foreach mà có luôn một array tất cả các item: PHP:
Tìm một bản ghi, lưu ý method này luôn trả về array assoc, key sẽ là attribute của item: PHP:
Bây h sẽ là tìm theo điều kiện advanced hơn chút: Tìm user hơn 24 tuổi: PHP:
Danh sách tất cả operator xem ở đây: Tìm user hơn 24 tuổi và active: PHP:
Tìm user có job là Lover: PHP:
Bỏ qua 20 user đầu: PHP:
Bỏ qua 20 user đầu, và chỉ lấy 10 user: PHP:
Sort theo tuổi: PHP:
Sort desc thì dùng giá trị -1: PHP:
Xoá user: PHP:
Tạo index: PHP:
Index sao cho email phải là unique: PHP:
Index email unique, chạy background lúc index (tức là async): PHP:
Index nhiều attribute: PHP:
|