Nie potrzebujesz żadnego z tego opakowania. Data to data :
var zeroth = {$or:[ {start: new Date(), {users:{$size:2}} ]};
Teraz oczywiście, jeśli te „daty” w twoim dokumencie są w rzeczywistości „ciągami”, a nie prawidłową datą typy to jest twój problem. I co naprawdę trzeba naprawić te wartości, aby były prawdziwymi datami.
Dotyczy to dowolnych implementacja języka, gdzie powinieneś pracować z natywnym typem „data” i pozwolić sterownikowi wykonać konwersję za Ciebie.
Jak określić, czy pole jest ciągiem
Cóż, wyraźna różnica polega na tym, że kiedy patrzysz na dokument w powłoce mongo, jeśli jest to prawdziwy typ daty BSON, to wygląda to tak:
"start": ISODate("2014-03-31T08:47:48.946Z"),
Jeśli to nie jest wystarczająco jasne, istnieje $type
operator, którego możesz użyć w zapytaniu takim jak to:
db.collection.find({ "start": { "$type": 2 } }).count()
To również nie MongoDB, który to robi, jeśli jest to ciąg znaków, ale raczej zła implementacja w aplikacji lub imporcie, który był odpowiedzialny za utworzenie tego. Właśnie o to chodziło w punktach przedstawionych w początkowej odpowiedzi.