db.mycollection.find(HAS IMAGE URL)
Trả lời
truy vấn sẽ được
db.mycollection.find({"IMAGE URL":{"$exists":"true"}})
nó sẽ trả lại toàn bộ tài liệu có "URL IMAGE" như một chìa khóa ...........
tính năng này không hoạt động nếu doc ['IMAGE URL'] = null – kilianc
@kilianc Điều đó không đúng. $ tồn tại cũng sẽ thu được giá trị null. Xem https://docs.mongodb.org/manual/reference/operator/query/exists/ – dorvak
@dorvak chính xác, đó là lý do tại sao điều đó sẽ không thỏa mãn trường hợp sử dụng trong câu hỏi. – kilianc
này sẽ trả về tất cả các tài liệu có khóa gọi là "URL IMAGE", nhưng chúng vẫn có thể có giá trị null.
db.mycollection.find({"IMAGE URL":{$exists:true}});
này sẽ trả lại toàn bộ tài liệu với cả một phím gọi là "IMAGE URL" và một giá trị khác null.
db.mycollection.find({"IMAGE URL":{$ne:null}});
Ngoài ra, theo tài liệu, $ hiện không thể sử dụng chỉ mục, nhưng $ ne có thể.
Chỉnh sửa: Thêm một số ví dụ do quan tâm đến câu trả lời này
Với những chèn:
db.test.insert({"num":1, "check":"check value"});
db.test.insert({"num":2, "check":null});
db.test.insert({"num":3});
này sẽ trả lại toàn bộ ba tài liệu:
db.test.find();
này sẽ trả lại chỉ các tài liệu đầu tiên và thứ hai:
db.test.find({"check":{$exists:true}});
này sẽ trở lại chỉ là tài liệu đầu tiên:
db.test.find({"check":{$ne:null}});
này sẽ trở lại chỉ là tài liệu thứ hai và thứ ba:
db.test.find({"check":null})
Đó là câu trả lời đúng! – redice
Theo tài liệu, '$ ne' ** bao gồm các tài liệu không chứa trường **. Điều này đã thay đổi kể từ khi bạn đăng câu trả lời? http://docs.mongodb.org/manual/reference/operator/query/ne/ –
Tôi không tin điều đó đã thay đổi. Khi kiểm tra $ ne, giá trị được kiểm tra trong tất cả các tài liệu, bao gồm cả những tài liệu không chứa trường, nhưng $ ne: null vẫn không khớp với tài liệu không chứa trường vì giá trị của trường vẫn là rỗng, mặc dù trường không tồn tại trong tài liệu đó. –
Trong pymongo bạn có thể sử dụng:
db.mycollection.find({"IMAGE URL":{"$ne":None}});
Vì pymongo đại diện cho mongo "null" là python "None".
Một giải pháp thay thế chưa được đề cập, nhưng có thể là một lựa chọn hiệu quả hơn đối với một số (không hoạt động với mục NULL) là sử dụng sparse index (mục trong chỉ mục chỉ tồn tại khi có gì đó trong trường). Dưới đây là một tập hợp dữ liệu mẫu:
db.foo.find()
{ "_id" : ObjectId("544540b31b5cf91c4893eb94"), "imageUrl" : "http://example.com/foo.jpg" }
{ "_id" : ObjectId("544540ba1b5cf91c4893eb95"), "imageUrl" : "http://example.com/bar.jpg" }
{ "_id" : ObjectId("544540c51b5cf91c4893eb96"), "imageUrl" : "http://example.com/foo.png" }
{ "_id" : ObjectId("544540c91b5cf91c4893eb97"), "imageUrl" : "http://example.com/bar.png" }
{ "_id" : ObjectId("544540ed1b5cf91c4893eb98"), "otherField" : 1 }
{ "_id" : ObjectId("544540f11b5cf91c4893eb99"), "otherField" : 2 }
Bây giờ, tạo chỉ mục thưa thớt trên sân imageurl:
db.foo.ensureIndex({ "imageUrl": 1 }, { sparse: true })
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
Bây giờ, luôn luôn có một cơ hội (và đặc biệt với thiết lập một dữ liệu nhỏ như mẫu của tôi) thay vì sử dụng chỉ mục, MongoDB sẽ sử dụng quét bảng, ngay cả đối với truy vấn chỉ mục tiềm năng được bảo hiểm. Khi nó quay ra rằng mang lại cho tôi một cách dễ dàng để minh họa sự khác biệt ở đây:
db.foo.find({}, {_id : 0, imageUrl : 1})
{ "imageUrl" : "http://example.com/foo.jpg" }
{ "imageUrl" : "http://example.com/bar.jpg" }
{ "imageUrl" : "http://example.com/foo.png" }
{ "imageUrl" : "http://example.com/bar.png" }
{ }
{ }
OK, vì vậy các tài liệu phụ không có imageUrl
đang được trả lại, chỉ có sản phẩm nào, không phải những gì chúng tôi muốn.Chỉ cần xác nhận lý do tại sao, hãy giải thích lý do:
db.foo.find({}, {_id : 0, imageUrl : 1}).explain()
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 6,
"nscannedObjects" : 6,
"nscanned" : 6,
"nscannedObjectsAllPlans" : 6,
"nscannedAllPlans" : 6,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"server" : "localhost:31100",
"filterSet" : false
}
Vì vậy, có, BasicCursor
bằng tính năng quét bảng, nó không sử dụng chỉ mục. Hãy buộc các truy vấn để sử dụng chỉ số thưa thớt của chúng tôi với một hint()
:
db.foo.find({}, {_id : 0, imageUrl : 1}).hint({imageUrl : 1})
{ "imageUrl" : "http://example.com/bar.jpg" }
{ "imageUrl" : "http://example.com/bar.png" }
{ "imageUrl" : "http://example.com/foo.jpg" }
{ "imageUrl" : "http://example.com/foo.png" }
Và có kết quả, chúng tôi đang tìm kiếm - Các tài liệu chỉ với lĩnh vực dân cư được trả về. Điều này cũng chỉ sử dụng chỉ mục (tức là nó là một truy vấn chỉ mục được bảo hiểm), do đó chỉ có chỉ mục cần có trong bộ nhớ để trả về kết quả.
Đây là trường hợp sử dụng chuyên dụng và không thể sử dụng chung (xem các câu trả lời khác cho các tùy chọn đó). Đặc biệt cần lưu ý rằng khi mọi thứ đứng bạn không thể sử dụng count()
theo cách này (ví dụ của tôi nó sẽ trả về 6 không 4), vì vậy hãy chỉ sử dụng khi thích hợp.
trường văn bản luôn là chỉ mục thưa thớt, bạn không phải chỉ định rõ ràng. chỉ 2 xu của tôi. –
db.collection_name.find({"filed_name":{$exists:true}});
tìm nạp tài liệu có chứa tên tệp này ngay cả khi nó không có giá trị.
đề xuất của tôi:
db.collection_name.find({"field_name":{$type:2}}) //type:2 == String
Bạn có thể kiểm tra trên loại thuộc tính cần thiết, nó sẽ trả lại tất cả các tài liệu mà field_name nó truy vấn chứa một giá trị bởi vì bạn đang kiểm tra vào loại đệ của người khác nếu nó là null loại điều kiện không phù hợp nên không có gì sẽ được trả về.
Nb: nếu field_name có một chuỗi rỗng có nghĩa là "", nó sẽ được returned.It là hành vi tương tự cho db.collection_name.find({"filed_name":{$ne:null}});
xác nhận thêm:
Được rồi, vì vậy chúng tôi chưa hoàn thành nhưng chúng ta cần thêm một điều kiện.
db.collection_name. find({ "field_name":{$type:2},$where:"this.field_name.length >0"})
HOẶC
db.collection_name. find({ "field_name":{$ne:null},$where:"this.field_name.length >0"})
tham chiếu cho tất cả các loại: https://docs.mongodb.com/manual/reference/operator/query/type/#op._S_type
Chia sẻ cho độc giả trong tương lai.
Truy vấn này làm việc cho chúng tôi (truy vấn thực hiện từ MongoDB compass):
{
"fieldName": {
"$nin": [
"",
null
]
}
}
db.<collectionName>.find({"IMAGE URL":{"$exists":"true"}, "IMAGE URL": {$ne: null}})
- 1. Không phải là null trong truy vấn EntityFramework
- 2. Làm thế nào để xóa tài liệu theo truy vấn một cách hiệu quả trong mongo?
- 3. Làm cách nào để bạn truy vấn theo Phạm vi Ngày và Ngày ở Mongo
- 4. Làm thế nào để truy vấn NOT NULL bằng Doctrine?
- 5. Làm thế nào để gán chuỗi rỗng nếu giá trị là null trong truy vấn LINQ?
- 6. Mongo ISODate truy vấn trong Java
- 7. Làm thế nào để viết một truy vấn cho "orderby" trong trình điều khiển Mongo cho C# để sắp xếp?
- 8. Truy vấn Mongo DB trong java
- 9. Mongo DB $ hoặc truy vấn trong PHP
- 10. Làm cách nào để thực hiện truy vấn "KHÔNG IN" trong Mongo?
- 11. Làm cách nào để chạy truy vấn không gian địa lý ở Mongo?
- 12. mongo - làm thế nào để truy vấn một json lồng nhau
- 13. Mongo {$ ne: null} không làm việc như mong đợi
- 14. Làm thế nào để sử dụng IS NULL trong một truy vấn parametrized (Delphi)
- 15. Đây có phải là cách hiệu quả nhất để thể hiện truy vấn XDocument này không?
- 16. Làm thế nào để HOẶC giá trị null trong truy vấn Apache Solr?
- 17. Làm thế nào để tiếp tục tối ưu hóa bảng MySQL này cho một Truy vấn
- 18. Làm cách nào để hủy truy vấn trong vỏ mongo javascript
- 19. Xóa nhiều tài liệu khỏi mongo trong một truy vấn
- 20. Làm thế nào để truy cập điều khiển mà là trong bảng điều khiển trong C#
- 21. Làm thế nào để xử lý nếu tham số truy vấn là null hoặc trống trong hibernate?
- 22. MongoDB: Làm thế nào để truy vấn cho các bản ghi mà trường là null hoặc không được đặt?
- 23. Thành phần Trình duyệt web là IE7 không phải IE8? Làm thế nào để thay đổi điều này?
- 24. Làm thế nào để bạn thực hiện điều này từ điển Python an toàn?
- 25. Làm thế nào để đảm bảo tham số của bộ điều khiển ASP.net Web API không phải là null?
- 26. HashMap.this.clear() điều này có nghĩa là gì, làm thế nào để làm việc này
- 27. Truy vấn lồng nhau Danh sách tồn tại trong Mongo
- 28. Làm thế nào để làm tham gia truy vấn này trong Django
- 29. Làm thế nào để truy vấn MongoDB từ R?
- 30. Làm thế nào để bạn duy trì giá trị chuỗi truy vấn trong asp.net mvc?
Câu trả lời ngắn: truy vấn '{lĩnh vực: {$ ne: null}} 'kiểm tra không null http://docs.mongodb.org/manual/reference/operator/query/ne/ – Jaider