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

sql „like“-Operationen für Zahlen in Mongodb

Speichern Sie Telefonnummern nicht als ganze Zahlen. Speichern Sie sie als Zeichenfolgen. Wenn Sie einen Wert haben, der nur aus Ziffern besteht und bei dem Rechnen sinnlos ist, wie z. B. eine Postleitzahl, eine Bankkontonummer oder eine Telefonnummer, dann macht es wenig Sinn, ihn als Zahl zu speichern.

  • Wie Sie bereits bemerkt haben, ist es fast unmöglich, Zahlen zu suchen, wenn Sie nach einer Ziffernfolge suchen möchten, da Computersysteme Ganzzahlen binär und nicht dezimal speichern.
  • Du darfst keine führenden Nullen haben
  • Wenn die Zahl zu lang ist, tritt entweder ein ganzzahliger Überlauf auf oder Sie werden in eine Fließkommazahl umgewandelt (nach Ermessen Ihres MongoDB-Treibers). Beides führt zu einem sehr seltsamen Verhalten.

All dies gilt übrigens für fast jede Datenbank, nicht nur für MongoDB.

Aber wenn Sie absolut entschlossen sind, sie als Nummern zu behalten, können Sie zwei Dinge tun.

  1. Wenn die Anzahl der unbekannten Ziffern festgelegt ist, können Sie den $gt verwenden und $lt Operatoren, um nach einem Bereich zu suchen. contactphone:{$gt:5556000, $lt:5556999} würde alle Nummern mit dem Muster 5556xxx finden .
  2. Sie könnten einen $where verwenden -query, die eine Javascript-Funktion verwendet, um jede Zahl intern in eine Zeichenfolge umzuwandeln, und dann Ihren regulären Ausdruck auf diese Zeichenfolge anwendet. $where: "String(this.contactphone).match(/^4832/) != null" . Ich hoffe, Sie haben nicht viele Dokumente in Ihrer Datenbank, denn wenn Sie dies tun, kann diese Abfrage eine Weile dauern.