MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak powiedzieć... dopasuj, gdy pole jest liczbą... w mongodb?

Użyj $type operator w twoim $match :

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

Nie ma jednej wartości typu dla liczby, więc musisz wiedzieć, jaki masz typ liczby:

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

Lub użyj $or operator pasujący do wszystkich typów liczb:

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

Lub nawet użyj $not aby dopasować wszystkie dokumenty, w których city nie jest ciągiem:

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

ZAKTUALIZOWANO

Aby dopasować wszystkie dokumenty, w których city to ciąg liczbowy, do którego można użyć wyrażenia regularnego:

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. Strumienie Mongo Change uruchamiane wiele razy (tak jakby):aplikacja Node działająca w wielu instancjach

  2. Mongodb :projekcja elementów tablicy z findOneAndUpdate nie działa?

  3. Jak wykluczyć z wyników wyszukiwania dokumenty z polami, których nie ma w zapytaniu?

  4. Mongodb, grupuj według datediff i otrzymuj godzinę

  5. MongoDB grupuj według godziny