このラッピングは必要ありません。日付は日付です :
var zeroth = {$or:[ {start: new Date(), {users:{$size:2}} ]};
もちろん、ドキュメント内のこれらの「日付」が実際には「文字列」であり、適切な日付ではない場合 タイプすると、それがあなたの問題です。そして、あなたが本当に これらの値を実際の日付になるように修正する必要があります。
これはすべてに適用されます 言語の実装。ネイティブの「日付」タイプを使用して、ドライバーに変換を任せる必要があります。
フィールドが文字列かどうかを判断する方法
明らかな違いは、mongoシェルでドキュメントを見ると、それが実際のBSON日付型である場合、次のようになります。
"start": ISODate("2014-03-31T08:47:48.946Z"),
それが十分に明確でない場合は、 $type
次のようなクエリで使用できる演算子:
db.collection.find({ "start": { "$type": 2 } }).count()
また、そうではありません 文字列の場合にこれを実行しているMongoDBですが、これを作成する原因となったアプリケーションまたはインポートでの実装がかなり悪いです。これが、最初の回答で指摘されたすべてのことでした。