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.