Hướng dẫn $exists trong mongodb - $ tồn tại trong mongodb
This entry is part 17 of 24 in the series MongoDB Kiểm tra null, check tồn tại trong MongoDB với $exists. Trong MongoDB, dữ liệu lưu ở collection không có cấu trúc dữ liệu cố định. Tức là bản ghi (document) này có field này nhưng bản ghi khác lại không có field đó. Do đó khi truy vấn, tìm kiếm theo field nào đó, ta cần phân biệt field đó null hay là không tồn tại. Ví dụ mình insert 5 bản ghi (document) sau vào collection db.getCollection('player').find({country: {$ne: null}})3 db.player.insert([ {'_id':'1', 'name':'neymar', 'country':null, 'age':'25'}, {'_id':'2', 'name':'hazard', 'country':null, 'age':'25'}, {'_id':'3', 'name':'mbappe', 'age':'18'}, {'_id':'4', 'name':'modric', 'country':'croatia', 'age':'30'}, {'_id':'5', 'name':'ronaldo', 'country':'portugal', 'age':'33'}]) Trong đó bản ghi 1 và 2 có field db.getCollection('player').find({country: {$ne: null}})4 là null, bản ghi thứ 3 không tồn tại field db.getCollection('player').find({country: {$ne: null}})4 Bây giờ mình sẽ thực hiện lấy ra các bản ghi (document) có db.getCollection('player').find({country: {$ne: null}})4 khác null: db.getCollection('player').find({country: {$ne: null}}) Rõ ràng field không tồn tại cũng được tính như là field có giá trị bằng null. Tương tự ta lấy các bản ghi có country bằng null thì kết quả như sau: Kiểm tra field tồn tại trong MongoDB ($exists)Field/trường không tồn tại tương đương với giá trị bằng null, tuy nhiên nếu muốn kiểm tra chính xác field đó có tồn tại hay không thì ta phải dùng tới db.getCollection('player').find({country: {$ne: null}})7 Ví dụ, tìm các document có chứa trường db.getCollection('player').find({country: {$ne: null}})4 db.getCollection('player').find({country: {$exists: true}}) Kết quả: Chỉ duy nhất bản ghi có _id = 3 là không thỏa mãn. Okay, Done! References: https://docs.mongodb.com/manual/reference/operator/query/exists/ Có thể sử dụng 1.Syntax: db.getCollection('player').find({country: {$exists: true}})0 Ví dụ: sử dụng bộ sưu tập 2:db.getCollection('player').find({country: {$ne: null}})7 matches the documents that contain the field, including documents where the field value is db.getCollection('player').find({country: {$exists: true}})3. If db.getCollection('player').find({country: {$exists: true}})1 is false, the query returns only the documents that do not contain the field. [1] Ví dụ trả về 4. Các tài liệu thiếu giá trị 5 hoặc có giá trị null 5 không được tính.not correspond to SQL operator db.getCollection('player').find({country: {$exists: true}})6. For SQL db.getCollection('player').find({country: {$exists: true}})6, refer to the db.getCollection('player').find({country: {$exists: true}})8 operator. MẹoNếu bạn chỉ cần tài liệu trong đó 1 có giá trị không null, bạn:
Có thể sử dụng 2 thay vì 3.Không cần một chỉ số thưa thớt trên 1.
Ví dụ: sử dụng bộ sưu tập 2:
Ví dụ trả về 4. Các tài liệu thiếu giá trị 5 hoặc có giá trị null 5 không được tính.
Xem thêm:
Tài liệu về nhà → Hướng dẫn sử dụng MongoDB
db.getCollection('player').find({country: {$ne: null}})7sYNTAX: db.getCollection('player').find({country: {$exists: true}})0 Bảng sau so sánh hiệu suất truy vấn db.getCollection('player').find({country: {$ne: null}})7 bằng cách sử dụng các chỉ mục thưa thớt và không phân bổ:
Các truy vấn sử dụng 3 trên các trường sử dụng chỉ mục không phân bổ hoặc sử dụng 3 trên các trường không được lập chỉ mục kiểm tra tất cả các tài liệu trong một bộ sưu tập. Để cải thiện hiệu suất, hãy tạo một chỉ mục thưa thớt trên 1 như được hiển thị trong kịch bản sau:
MẹoNếu bạn chỉ cần tài liệu trong đó 1 có giá trị không null, bạn:
Ví dụ: sử dụng bộ sưu tập 2:db.getCollection('player').find({country: {$ne: null}})2 Ví dụ trả về 4. Các tài liệu thiếu giá trị 5 hoặc có giá trị null 5 không được tính.MẹoNếu bạn chỉ cần tài liệu trong đó db.records.find( { a: { $exists: true } } )1 có giá trị không null, bạn: |