Kiểm tra trường đó tồn tại với MongoDB


131

Vì vậy, tôi đang cố gắng tìm tất cả các bản ghi có bộ trường và không có giá trị.

Tôi thử sử dụng $exists, tuy nhiên theo tài liệu MongoDB, truy vấn này sẽ trả về các trường có giá trị bằng null.

$exists không khớp với các tài liệu có chứa trường lưu trữ giá trị null.

Vì vậy, bây giờ tôi giả sử tôi sẽ phải làm một cái gì đó như thế này:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

Tuy nhiên, bất cứ khi nào tôi thử điều này, tôi đều gặp lỗi [invalid use of $not] Bất cứ ai cũng có ý tưởng về cách truy vấn này?

Câu trả lời:


184

Sử dụng $ne(cho "không bằng")

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })

Điều này trở lại là gì? Một bộ sưu tập null? Một mặt hàng duy nhất? Một mảng?
Oliver Dixon

4
@iLoveUnicorns: những gì findluôn trả về: một bộ sưu tập các bản ghi, phù hợp với tiêu chí.
Sergio Tulentsev

2
@SergioTulentsev AFAIK nó trả về một con trỏ
fernandohur

@fernandohur: vâng, nhưng nếu bạn có ít hơn một trang tài liệu, bạn thậm chí sẽ không thấy sự khác biệt. Và nếu bạn chạy truy vấn này từ trình điều khiển bên ngoài, tôi chắc chắn rằng hầu hết chúng sẽ bảo vệ bạn khỏi chi tiết triển khai con trỏ.
Sergio Tulentsev

24

Giả sử chúng ta có một bộ sưu tập như dưới đây:

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

Chúng tôi muốn biết nếu lĩnh vực chai có mặt hay không?

Trả lời:

db.products.find({"things.bottle":{"$exists":true}})

2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. Từ các tài liệu.
AlbertEngelB

1
vâng, nhưng tôi không thấy lý do tại sao một DB sẽ chứa giá trị null, nó cẩu thả
Martijn Scheffer

3

tôi thấy rằng điều này làm việc cho tôi

db.getCollection('collectionName').findOne({"fieldName" : {$ne: null}})
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.