Använd $type
operatorn i din $match
:
db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: {$type: 16}}} // city is a 32-bit integer
]);
Det finns inte ett enda typvärde för nummer så du måste veta vilken typ av nummer du har:
32-bit integer 16
64-bit integer 18
Double 1
Eller använd en $or
operator för att matcha alla typer av nummer:
db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {$or: [{city: {$type: 1}}, {city: {$type: 16}}, {city: {$type: 18}}]}}
]);
Eller till och med använd $not
för att matcha alla dokument där city
är inte en sträng:
db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: {$not: {$type: 2}}}} // city is not a string
]);
UPPDATERAD
För att matcha alla dokument där city
är en numerisk sträng som du kan använda ett reguljärt uttryck:
db.zips.aggregate([
{$project : {city:{$substr:["$city",0,1]}}},
{$sort : {city : 1}},
{$match: {city: /^\d.*$/}} // city is all digits
]);