MongoDB: Alanın boş olduğu veya ayarlanmadığı kayıtlar nasıl sorgulanır?


106

Bir var Emailbir olan belgeyi sent_attarih alanı:

{
  'sent_at': Date( 1336776254000 )
}

Bu Emailgönderilmemişse, sent_atalan ya boştur ya da yoktur.

Gönderilen / gönderilmeyenlerin sayısını almam gerekiyor Emails. Bu bilgileri sorgulamanın doğru yolunu bulmaya çalışırken takılıp kaldım. Sanırım gönderilen sayıyı almanın doğru yolu:

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

Ama gönderilmeyenlerin sayısını nasıl öğrenebilirim?

Yanıtlar:



16

YALNIZCA sent_atdeğeri ile tanımlanan belgeleri saymak istiyorsanız null( sent_atayarlanmayan belgeleri saymayın):

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

Teşekkür ederim. Alanın var olup olmadığını kontrol ederken ancak boş olarak ayarlandığında bu çok kullanışlıdır.
— jstice4all

Kullanırken çünkü Upvoted finddüz ile nullbu gibi değerleri yorumladığı 0.0olarak nullve bu çözüm bu kaçınır
— Matthias Herrmann

12

Kullanım:

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

Sent_at özelliği boş olan veya ayarlanmamış tüm e-postaları sayan. Yukarıdaki sorgu aşağıdakiyle aynıdır.

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

8

Görünüşe göre sadece tek satır yapabilirsiniz:

{ "sent_at": null }

0

Ayrıca şunu da deneyebilirsiniz:

db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()

0
db.employe.find({ $and:[ {"dept":{ $exists:false }, "empno": { $in:[101,102] } } ] }).count();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.