MongoDB: Jak zapytać o rekordy, w których pole ma wartość null lub nie jest ustawione?


106

Mam Emaildokument z sent_atpolem daty:

{
  'sent_at': Date( 1336776254000 )
}

Jeśli to Emailnie zostało wysłane, sent_atpole ma wartość null lub nie istnieje.

Muszę uzyskać liczbę wszystkich wysłanych / niewysłanych Emails. Utknąłem na próbach znalezienia właściwego sposobu zapytania o te informacje. Myślę, że to właściwy sposób, aby uzyskać liczbę wysłanych:

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

Ale jak mam policzyć te, które nie zostały wysłane?

Odpowiedzi:



16

Jeśli chcesz TYLKO policzyć dokumenty ze sent_atzdefiniowaną wartością null(nie licz dokumentów z sent_atnie ustawionymi):

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

Dziękuję Ci. Jest to bardzo przydatne podczas sprawdzania, czy pole istnieje, ale ma wartość null.
— jstice4all

Upvoted, ponieważ przy stosowaniu findw zwykły nullinterpretuje wartość jak 0.0jak nulli roztwór ten unika tego
— Matthias Herrmann

12

Posługiwać się:

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

Zlicza wszystkie e-maile, których właściwość sent_at ma wartość null lub nie jest ustawiona. Powyższe zapytanie jest takie samo jak poniżej.

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

8

Wygląda na to, że możesz po prostu zrobić pojedynczą linię:

{ "sent_at": null }

0

Możesz też spróbować tego:

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();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.