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

sql operazioni "mi piace" sui numeri in mongodb

Non memorizzare i numeri di telefono come numeri interi. Conservali come stringhe. Quando si ha un valore composto solo da cifre e su cui l'aritmetica non ha senso, come un codice postale, un numero di conto bancario o un numero di telefono, memorizzarlo come numero non ha molto senso.

  • Come hai già notato, è quasi impossibile cercare i numeri quando vuoi cercare una sequenza di cifre, perché i sistemi informatici memorizzano i numeri interi in binario, non in decimale.
  • Non puoi avere zeri iniziali
  • Quando il numero è troppo lungo, incontrerai un intero overflow o lo convertirai in un numero a virgola mobile (a discrezione del tuo driver MongoDB). Entrambi si tradurranno in un comportamento molto strano.

Tutto questo si applica a quasi tutti i database, tra l'altro, non solo a MongoDB.

Ma se sei assolutamente determinato a mantenerli come numeri, ecco due cose che puoi fare.

  1. Quando il numero di cifre sconosciute è fisso, puoi usare il $gt e $lt operatori per cercare un intervallo. contactphone:{$gt:5556000, $lt:5556999} troverebbe tutti i numeri con lo schema 5556xxx .
  2. Potresti usare un $where -query che utilizza una funzione javascript per convertire internamente ogni numero in una stringa e quindi applica la tua espressione regolare a quella stringa. $where: "String(this.contactphone).match(/^4832/) != null" . Spero che tu non abbia molti documenti nel tuo database, perché quando lo fai, questa query potrebbe richiedere del tempo.