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.