sql >> Database >  >> NoSQL >> MongoDB

sql 'like' bewerkingen op getallen in mongodb

Sla telefoonnummers niet op als gehele getallen. Bewaar ze als strings. Als je een waarde hebt die alleen uit cijfers bestaat en waarop rekenen zinloos is, zoals een postcode, een bankrekeningnummer of een telefoonnummer, dan heeft het niet veel zin om deze als getal op te slaan.

  • Zoals je al hebt opgemerkt, zijn getallen bijna onmogelijk te zoeken als je naar een cijferreeks wilt zoeken, omdat computersystemen gehele getallen in binair getal opslaan, niet in decimaal.
  • U kunt geen voorloopnullen hebben
  • Als het getal te lang is, zul je ofwel een integer overflow tegenkomen of je zal het laten converteren naar een floating-point getal (naar goeddunken van je MongoDB-stuurprogramma). Beide zullen resulteren in heel vreemd gedrag.

Dit alles is trouwens van toepassing op bijna elke database, niet alleen op MongoDB.

Maar als je absoluut vastbesloten bent om ze als nummers te houden, zijn hier twee dingen die je kunt doen.

  1. Als het aantal onbekende cijfers is vastgesteld, kunt u de $gt . gebruiken en $lt operators om een ​​bereik te zoeken. contactphone:{$gt:5556000, $lt:5556999} zou alle nummers vinden met het patroon 5556xxx .
  2. Je zou een $where kunnen gebruiken -query die een javascript-functie gebruikt om elk getal intern naar een tekenreeks te converteren en vervolgens uw reguliere expressie op die tekenreeks toepast. $where: "String(this.contactphone).match(/^4832/) != null" . Ik hoop dat je niet veel documenten in je database hebt, want als je dat doet, kan deze zoekopdracht even duren.



  1. Resultaten beperken in MongoDB maar toch de volledige telling krijgen?

  2. Birt mongodb param

  3. 2 benaderingen voor het volgen van online gebruikers met Redis. Welke is sneller?

  4. MongoDB automatiseren met SaltStack