getTypes = function (field) { var alltypes=[ { t: "Regex", minv: Timestamp(2147483647,9999) }, { t: "Timestamp", minv: Timestamp(0,0) }, { t: "ISODate", minv: new Date(0,0,0) }, { t: "True", minv: true }, { t: "False", minv: false }, { t: "ObjectId", minv: ObjectId("000000000000000000000000") }, { t: "BinData", minv: BinData(0,"") }, { t: "Array", minv: [] }, { t: "Subdocument", minv: {} }, { t: "String", minv: "" }, { t: "Number", minv: NumberLong("-9223372036854775807") }, { t: "Null", minv: null } ] ; var maxPos=alltypes.length; var con=[]; con[maxPos]="Other/Unknown"; for (pos = maxPos-1; pos > -1; pos--) { con[pos] = {"$cond":{ if: {$gte:[field, alltypes[pos]["minv"] ]}, then: alltypes[pos]["t"], else: con[pos+1] }}; } return con[0]; }