sql >> データベース >  >> NoSQL >> MongoDB

mongodbの数値に対するsql'like'操作

    電話番号を整数として保存しないでください。それらを文字列として保存します。郵便番号、銀行口座番号、電話番号など、数字のみで構成され、算術演算が無意味な値がある場合、それを数値として格納することはあまり意味がありません。

    • すでにお気づきのように、数字シーケンスを検索する場合、コンピューターシステムは整数を10進数ではなく、2進数で格納するため、数字を検索することはほとんど不可能です。
    • 先行ゼロを設定することはできません
    • 数値が長すぎると、整数のオーバーフローが発生するか、浮動小数点数に変換されます(MongoDBドライバーの裁量による)。どちらも非常に奇妙な動作になります。

    ちなみに、これはすべて、MongoDBだけでなく、ほとんどすべてのデータベースに当てはまります。

    しかし、それらを数字として保持することを絶対に決心している場合は、次の2つのことができます。

    1. 不明な桁数が固定されている場合は、$gtを使用できます。 および$lt 範囲を検索する演算子。 contactphone:{$gt:5556000, $lt:5556999} パターン5556xxxのすべての番号が検索されます 。
    2. $whereを使用できます -javascript関数を使用してすべての数値を内部的に文字列に変換し、正規表現をその文字列に適用するクエリ。 $where: "String(this.contactphone).match(/^4832/) != null" 。データベースに多くのドキュメントがないことを願っています。そうすると、このクエリに時間がかかる可能性があるためです。



    1. Mongodbタイプの参照ノード

    2. Nodejs Mongoose-コールバック地獄を回避する方法は?

    3. MapReduceのHadoopマッパークラスとは何ですか?

    4. XMLデータをmongodbコレクションに保存する