ตรวจสอบว่า Field นั้นมีอยู่ด้วย MongoDB


131

ดังนั้นฉันพยายามค้นหาระเบียนทั้งหมดที่มีชุดเขตข้อมูลและไม่เป็นค่าว่าง

ฉันลองใช้$existsอย่างไรก็ตามตามเอกสาร MongoDBแบบสอบถามนี้จะคืนค่าเขตข้อมูลที่มีค่าเป็นศูนย์

$exists จับคู่เอกสารที่มีเขตข้อมูลที่เก็บค่า Null

ดังนั้นตอนนี้ฉันสมมติว่าฉันจะต้องทำสิ่งนี้:

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

เมื่อใดก็ตามที่ฉันพยายามนี้ แต่ผมได้รับข้อผิดพลาด[invalid use of $not] ทุกคนมีความคิดของวิธีการแบบสอบถามสำหรับนี้หรือไม่?

คำตอบ:


184

ใช้$ne(สำหรับ "ไม่เท่ากัน")

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

สิ่งนี้จะส่งคืนอะไร? คอลเลกชัน null หรือไม่ รายการเดียว? อาร์เรย์หรือไม่
Oliver Dixon

4
@iLoveUnicorns: สิ่งที่findส่งกลับมาเสมอ: ชุดของระเบียนที่ตรงกับเกณฑ์
Sergio Tulentsev

2
@SergioTulentsev AFAIK จะส่งคืนเคอร์เซอร์
fernandohur

@fernandohur: ใช่ แต่ถ้าคุณมีเอกสารน้อยกว่าหนึ่งหน้าคุณจะไม่เห็นความแตกต่างเลย และถ้าคุณต้องเรียกใช้แบบสอบถามนี้จากไดรเวอร์ภายนอกฉันค่อนข้างแน่ใจว่าส่วนใหญ่ป้องกันคุณจากรายละเอียดการใช้เคอร์เซอร์
Sergio Tulentsev

24

สมมติว่าเรามีคอลเล็กชันดังต่อไปนี้:

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

เราต้องการที่จะรู้ว่าสนามขวดมีอยู่หรือไม่?

ตอบ:

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. จากเอกสาร
AlbertEngelB

1
ใช่ แต่ฉันไม่เห็นว่าทำไม DB จะมีค่าเป็นศูนย์มันเลอะเทอะ
Martijn Scheffer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.