MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment dire... correspond quand le champ est un nombre... dans mongodb ?

Utilisez le $type opérateur dans votre $match :

db.zips.aggregate([
    {$project : {city:{$substr:["$city",0,1]}}},
    {$sort : {city : 1}}, 
    {$match: {city: {$type: 16}}}      // city is a 32-bit integer
]);

Il n'y a pas de valeur de type unique pour le nombre, vous devez donc savoir quel type de nombre vous avez :

32-bit integer   16
64-bit integer   18
Double           1

Ou utilisez un $or opérateur pour faire correspondre tous les types de nombres :

db.zips.aggregate([
    {$project : {city:{$substr:["$city",0,1]}}},
    {$sort : {city : 1}}, 
    {$match: {$or: [{city: {$type: 1}}, {city: {$type: 16}}, {city: {$type: 18}}]}}
]);

Ou même utiliser $not pour correspondre à tous les documents où city n'est pas une chaîne :

db.zips.aggregate([
    {$project : {city:{$substr:["$city",0,1]}}},
    {$sort : {city : 1}}, 
    {$match: {city: {$not: {$type: 2}}}}      // city is not a string
]);

MISE À JOUR

Pour faire correspondre tous les documents où city est une chaîne numérique, vous pouvez utiliser une expression régulière :

db.zips.aggregate([
    {$project : {city:{$substr:["$city",0,1]}}},
    {$sort : {city : 1}}, 
    {$match: {city: /^\d.*$/}}      // city is all digits
]);