Use o
$type
operador em seu $match
:db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: {$type: 16}}} // city is a 32-bit integer
]);
Não há um valor de tipo único para número, então você precisa saber qual tipo de número você tem:
32-bit integer 16
64-bit integer 18
Double 1
Ou use um
$or
operador para corresponder a todos os tipos de números:db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {$or: [{city: {$type: 1}}, {city: {$type: 16}}, {city: {$type: 18}}]}}
]);
Ou até mesmo use
$not
para corresponder a todos os documentos em que city
não é uma string:db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: {$not: {$type: 2}}}} // city is not a string
]);
ATUALIZADO
Para corresponder a todos os documentos em que
city
é uma string numérica, você pode usar uma expressão regular:db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: /^\d.*$/}} // city is all digits
]);