Você não precisa de nada desse embrulho. Uma data é uma data :
var zeroth = {$or:[ {start: new Date(), {users:{$size:2}} ]};
Agora, é claro, se essas "datas" em seu documento forem realmente "strings" e não data adequada tipos, então esse é o seu problema. E o que você realmente precisa é corrigir esses valores para que sejam datas reais.
Isso se aplica a qualquer implementação da linguagem, onde você deve trabalhar com o tipo "data" nativo e deixar o driver fazer a conversão para você.
Como determinar se o campo é uma string
Bem, a clara diferença é quando você olha para um documento no shell mongo, se for um tipo de data BSON real, ficará assim:
"start": ISODate("2014-03-31T08:47:48.946Z"),
Se isso não estiver claro o suficiente, existe o
$type
operador que você pode usar em uma consulta como esta:db.collection.find({ "start": { "$type": 2 } }).count()
Também não MongoDB que está fazendo isso se for uma string, mas sim uma implementação ruim no aplicativo ou importação que foi responsável por criar isso. Que era o que os pontos levantados na resposta inicial eram.