MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да кажа... съвпадение, когато полето е число... в mongodb?

Използвайте $type оператор във вашия $match :

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

Няма стойност за единичен тип за число, така че трябва да знаете какъв тип число имате:

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

Или използвайте $or оператор за съвпадение на всички типове числа:

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

Или дори използвайте $not за да съответства на всички документи, където city не е низ:

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

АКТУАЛИЗИРАНО

За да съответства на всички документи, където city е числов низ, можете да използвате регулярен израз:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Вземете най-новата стойност на ненулево поле от документи с клеймо за време

  2. Използване на динамична стойност при агрегиране

  3. Как мога да използвам async-await с MongoClient

  4. Вмъкнете или актуализирайте в Mongo с помощта на mongoose и модифицирайте вътрешните елементи, докато актуализирате

  5. Филтър Mongoose, базиран на динамичен ключ за дата със стойност