MongoDB $type selects the documents where the value of the field is an instance of the specified numeric BSON type.
As per your document structure date field is not actual ISODATE it looks like String so it's data type 2 and age default data type 1 like double so your java code as
BasicDBObject query = new BasicDBObject();
query.put("gender",new BasicDBObject("$type",2));
query.put("city",new BasicDBObject("$type",2));
query.put("phone",new BasicDBObject("$type",2));
query.put("email",new BasicDBObject("$type",2));
query.put("date",new BasicDBObject("$type",2));
query.put("age", new BasicDBObject("$type",1));
DBCursor cursorDoc = collection.find(query);
while (cursorDoc.hasNext()) {
BasicDBObject object = (BasicDBObject) cursorDoc.next();
System.out.println(object);
}