MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como dizer... corresponder quando o campo é um número... no mongodb?


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
]);