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

109 bài viết.
1587 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
155 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 3 năm trước
155 46
White
149 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 2 năm trước
149 39
White
104 17
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 2 năm trước
104 17
Bài viết liên quan
White
41 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 3 năm trước
41 7
White
0 2
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 27 ngày trước
0 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


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