MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ tồn tại

Trong MongoDB, bạn có thể sử dụng $exists toán tử truy vấn phần tử để so khớp các tài liệu có chứa một trường cụ thể.

Bạn cũng có thể sử dụng nó để đối sánh các tài liệu không chứa một trường cụ thể.

Bạn cũng có thể sử dụng nó kết hợp với các toán tử khác như $nin để khớp với các tài liệu trong đó trường nhất định tồn tại, nhưng trường đó không chứa giá trị cụ thể.

Ví dụ

Giả sử chúng ta có một bộ sưu tập có tên là cats chứa các tài liệu sau:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Các tài liệu này hơi mâu thuẫn với các trường mà chúng có. Một số có weight , những trường khác có height , một số có born trường, v.v.

Chúng tôi có thể sử dụng $exists toán tử để trả về các tài liệu từ bộ sưu tập đó có một trường cụ thể.

Ví dụ:

db.cats.find( { weight: { $exists: true } } )

Kết quả:

{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }

Chúng tôi có thể thấy rằng chỉ những tài liệu có chứa weight trường được trả về.

Các trường chứa null

$exists toán tử bao gồm các trường chứa null . Nó không phân biệt giữa null và không phải null giá trị.

Ví dụ:

db.cats.find( { name: { $exists: true } } )

Kết quả:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }

Chúng tôi có thể thấy rằng tài liệu 5 đã được trả lại, mặc dù name của nó trường null .

Tồn tại mà không có giá trị cụ thể

Bạn có thể kết hợp $exists với các toán tử khác để trả về các tài liệu có chứa trường, nhưng trường đó không chứa một giá trị cụ thể.

Ví dụ:

db.cats.find( { weight: { $exists: true, $nin: [20,30] } } )

Kết quả:

{ "_id" : 4, "name" : "Sox", "weight" : 40 }

Đây là một kết quả khác với kết quả mà chúng tôi sẽ thấy nếu chúng tôi chỉ sử dụng $nin không có $exists nhà điều hành.

Đây là những gì sẽ trông như thế nào:

db.cats.find( { weight: { $nin: [20,30] } } )

Kết quả:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Tài liệu không chứa trường cụ thể

Bạn có thể sử dụng $exists: false để trả lại các tài liệu không chứa trường được chỉ định.

Ví dụ:

db.cats.find( { name: { $exists: false } } )

Kết quả:

{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Trong trường hợp này, một tài liệu trong bộ sưu tập không chứa name trường.

Kiểm tra nhiều trường

Bạn có thể kiểm tra sự tồn tại của nhiều trường bằng cách phân tách chúng bằng dấu phẩy.

Ví dụ:

db.cats.find( { 
  name: { $exists: true }, 
  height: { $exists: true } 
} )

Kết quả:

{ "_id" : 3, "name" : "Fluffy", "height" : 15 }

Ví dụ này trả về tất cả các tài liệu chứa cả name trường và height trường.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. bản sao Đặt Docker-soạn mongo

  2. chuyển đổi ngày iso thành dấu thời gian trong truy vấn mongo

  3. mgo - hiệu suất truy vấn dường như luôn chậm (500-650ms)

  4. Chỉ mục tài liệu con trong mongo

  5. MongoDB $ dateFromParts