sql >> Database >  >> NoSQL >> MongoDB

Hoe zeg je... match wanneer veld een getal is... in mongodb?

Gebruik de $type operator in uw $match :

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

Er is geen enkele typewaarde voor nummer, dus je moet weten welk type nummer je hebt:

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

Of gebruik een $or operator om alle soorten getallen te matchen:

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

Of gebruik zelfs $not om alle documenten te matchen waar city is geen string:

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

GE-UPDATE

Om alle documenten te matchen waar city is een numerieke tekenreeks die u kunt gebruiken als reguliere expressie:

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


  1. Hoe stel ik _id in op db-document in Mongoose?

  2. Mongoose, CastError:Cast to Array mislukt voor waarde bij het opslaan van een model dat een model bevat

  3. Gegevens invoegen in MongoDB - geen fout, geen invoeging

  4. MongoDB repliceren in een hybride cloudomgeving