Query nhiều giá trị trong MongoDB
TIL
763
mongodb
19
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

119 bài viết.
2031 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
182 46
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 5 năm trước
182 46
White
157 39
(Ả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 4 năm trước
157 39
White
118 19
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 hơn 4 năm trước
118 19
Bài viết liên quan
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết hơn 2 năm trước
0 4
White
4 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết hơn 1 năm trước
4 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
119 bài viết.
2031 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á!