MongoDB: วิธีค้นหาระเบียนที่ฟิลด์เป็นโมฆะหรือไม่ได้ตั้งค่า?


106

ฉันมีEmailเอกสารที่มีช่องsent_atวันที่:

{
  'sent_at': Date( 1336776254000 )
}

หากEmailยังไม่ได้ส่งsent_atฟิลด์นี้จะเป็นโมฆะหรือไม่มีอยู่

ฉันต้องการรับจำนวนการส่ง / ไม่ได้ส่งEmailsทั้งหมด ฉันติดขัดที่พยายามหาวิธีที่ถูกต้องในการค้นหาข้อมูลนี้ ฉันคิดว่านี่เป็นวิธีที่ถูกต้องในการนับจำนวนการส่ง:

db.emails.count({sent_at: {$ne: null}})

แต่ฉันจะนับคนที่ไม่ได้ส่งได้อย่างไร?

คำตอบ:



16

หากคุณต้องการนับเฉพาะเอกสารที่sent_atกำหนดด้วยค่าnull(อย่านับเอกสารที่sent_atไม่ได้ตั้งค่า):

db.emails.count({sent_at: { $type: 10 }})

ขอบคุณ. เมื่อตรวจสอบว่ามีฟิลด์ แต่ตั้งค่าเป็น null สิ่งนี้มีประโยชน์มาก
jstice4all

upvoted เพราะเมื่อใช้findกับธรรมดาnullมันตีความค่าเหมือน 0.0เป็นnullและแก้ปัญหานี้หลีกเลี่ยงนี้
แมทเธียมานน์

12

ใช้:

db.emails.count({sent_at: null})

ซึ่งจะนับอีเมลทั้งหมดที่มีคุณสมบัติ sent_at เป็นโมฆะหรือไม่ได้ตั้งค่า ข้อความค้นหาข้างต้นเหมือนกับด้านล่าง

db.emails.count($or: [
  {sent_at: {$exists: false}},
  {sent_at: null}
])


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