sql >> Database teknologi >  >> NoSQL >> MongoDB

sql 'like' operationer på tal i mongodb

Gem ikke telefonnumre som heltal. Gem dem som strenge. Når du har en værdi, der kun består af cifre, og hvor aritmetik er meningsløst, som et postnummer, et bankkontonummer eller et telefonnummer, så giver det ikke meget mening at gemme det som et tal.

  • Som du allerede har bemærket, er tal næsten umulige at søge, når du vil søge efter en ciffer-sekvens, fordi computersystemer gemmer heltal i binære, ikke i decimaler.
  • Du kan ikke have foranstillede nuller
  • Når tallet er for langt, vil du enten støde på et heltalsoverløb, eller du vil få det konverteret til et flydende kommatal (efter din MongoDB-drivers skøn). Begge vil resultere i meget mærkelig adfærd.

Alt dette gælder for næsten enhver database, forresten, ikke kun MongoDB.

Men hvis du er helt fast besluttet på at beholde dem som tal, er her to ting, du kan gøre.

  1. Når antallet af ukendte cifre er fastsat, kan du bruge $gt og $lt operatører til at søge efter et område. contactphone:{$gt:5556000, $lt:5556999} ville finde alle tal med mønsteret 5556xxx .
  2. Du kan bruge en $where -forespørgsel, som bruger en javascript-funktion til internt at konvertere hvert tal til en streng og derefter anvender dit regulære udtryk på den streng. $where: "String(this.contactphone).match(/^4832/) != null" . Jeg håber, du ikke har mange dokumenter i din database, for når du har det, kan denne forespørgsel tage et stykke tid.



  1. Hvordan opretter mongodb database/samling i farten

  2. Forespørger MongoDB GridFS?

  3. hvordan tilføjer jeg en værdi til toppen af ​​et array i mongodb?

  4. MongoDB $ifNull