MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come si dice... abbina quando il campo è un numero... in mongodb?

Usa $type operatore nel tuo $match :

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

Non esiste un unico valore di tipo per numero, quindi devi sapere quale tipo di numero hai:

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

Oppure usa un $or operatore per abbinare tutti i tipi di numeri:

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

Oppure usa $not per abbinare tutti i documenti in cui city non è una stringa:

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

AGGIORNATO

Per abbinare tutti i documenti in cui city è una stringa numerica che puoi usare come espressione regolare:

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