Query nhiều giá trị trong MongoDB
TIL
491
mongodb
11
White

Huy Trần viết ngày 31/03/2017

$or vs $in trong MongoDB

Khi bạn cần query với nhiều giá trị cho một trường, ví dụ như bạn cần tìm trong collection User những document có trường FirstName là "Huy" hoặc "King", thì bạn có thể dùng biểu thức $or hoặc $in như sau:

// using $or
db.users.find({ $or: [ { "FirstName": "Huy" }, { "FirstName": "King" } ] })

// using $in
db.users.find({ "FirstName": { $in: [ "Huy", "King" ] } })

Nhìn có vẻ giống nhau, vậy khi nào thì nên xài $or, khi nào nên xài $in?

Câu trả lời có sẵn trong tài liệu của MongoDB luôn:

  • Dùng $in khi bạn cần kiểm tra nhiều giá trị cho cùng một trường.
  • Dùng $or khi bạn cần kiểm tra nhiều điều kiện, có thể cùng một trường, có thể nhiều trường khác nhau.

Nhưng vì sao vậy? Có phải tại vấn đề performance không? Vậy tại sao hai cái này có performance khác nhau?

Có một điểm cần lưu ý là: MongoDB sẽ thực hiện việc scan toàn bộ các document trong collection với mỗi điều kiện trong biểu thức $or.

Như vậy có nghĩa là số lần scan toàn bộ collection của biểu thức $or tỉ lệ thuận với số điều kiện bên trong biểu thức đó.

Và ngược lại, số lần scan toàn bộ collection của biểu thức $in không phụ thuộc vào số giá trị bạn truyền vào để check trong biểu thức đó.

Vì vậy tùy vào nhu cầu cụ thể mà dùng $or hoặc $in cho phù hợp, mặc dù chức năng có vẻ na ná nhau nhưng khác biệt về performance là rất lớn nếu dữ liệu của bạn cũng lớn.

Huy - 03/31/2017

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Huy Trần

98 bài viết.
1438 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
144 43
Tại sao phải viết blog kĩ thuật? Có rất nhiều bài viết trên mạng nói về vấn đề tại sao một lập trình viên nên thường xuyên viết các bài blog kĩ thu...
Huy Trần viết hơn 2 năm trước
144 43
White
143 37
(Ảnh) Tiếp tục sêri (Link) lần này, chúng ta sẽ cùng tìm hiểu và mô phỏng lại một chức năng mà mọi người đang bắt đầu sử dụng hằng ngày, đó là chứ...
Huy Trần viết hơn 1 năm trước
143 37
White
96 16
Phần 1: Tự truyện Tui và Toán đã từng là hai kẻ thù không đội trời chung trong suốt hơn mười lăm năm ròng rã. Ngay từ ánh nhìn đầu tiên đã ghét nh...
Huy Trần viết gần 2 năm trước
96 16
Bài viết liên quan
Male avatar
38 7
Giới thiệu MongoDB là một giải pháp nosql database. Data được lưu ở dạng các bson document. Hỗ trợ vertical scaling và horizontal scaling, dynamic...
manhdung viết hơn 2 năm trước
38 7
White
18 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết hơn 1 năm trước
18 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
98 bài viết.
1438 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!