MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie sagt man ... übereinstimmen, wenn das Feld eine Zahl ist ... in Mongodb?

Verwenden Sie den $type Operator in Ihrem $match :

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

Es gibt keinen einzigen Typwert für Zahl, also müssen Sie wissen, welchen Typ von Zahl Sie haben:

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

Oder verwenden Sie ein $or Operator, um alle Arten von Zahlen abzugleichen:

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

Oder verwenden Sie sogar $not um alle Dokumente abzugleichen, in denen city ist kein String:

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

AKTUALISIERT

Um alle Dokumente abzugleichen, in denen city eine numerische Zeichenfolge ist, können Sie einen regulären Ausdruck verwenden:

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