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

16進文字列をmongodbの数値にどのように変換しますか?

    このような関数はまだ存在しません。$convertでのベース変換のサポート を参照してください。

    次のような関数を定義できます:

    function decimalToBase(input, base) {
       // works up to 72057594037927928 / FFFFFFFFFFFFF8
       var field = "$" + input;
       return {
          $let: {
             vars: {
                bits: {
                   $reduce: {
                      input: { $range: [0, 56] },
                      initialValue: [{ dec: field }],
                      in: {
                         $cond: {
                            if: { $gt: [{ $last: "$$value.dec" }, 0] },
                            then: {
                               $concatArrays: ["$$value",
                                  [{
                                     b: { $substrBytes: ["0123456789ABCDEF", { $mod: [{ $last: "$$value.dec" }, base] }, 1] },
                                     dec: { $trunc: { $divide: [{ $last: "$$value.dec" }, base] } }
                                  }]
                               ]
                            },
                            else: "$$value"
                         }
                      }
                   }
                }
             },
             in: {
                $reduce: {
                   input: { $reverseArray: "$$bits.b" },
                   initialValue: "",
                   in: { $concat: ["$$value", "$$this"] }
                }
             }
          }
       }
    };
    
    function baseToDecimal(input, base) {
       // works up to 72057594037927928 / FFFFFFFFFFFFF8
       var field = "$" + input;
       return {
          $sum: {
             $map: {
                input: { $range: [0, { $strLenBytes: field }] },
                in: {
                   $multiply: [
                      { $pow: [base, { $subtract: [{ $strLenBytes: field }, { $add: ["$$this", 1] }] }] },
                      { $indexOfBytes: ["0123456789ABCDEF", { $toUpper: { $substrBytes: [field, "$$this", 1] } }] }
                   ]
                }
             }
          }
       };
    }
    

    次に、たとえば次のように使用します。

    db.collection.insertOne({ hex: "A3F" })
    db.collection.aggregate({ $set: { decimal: baseToDecimal("hex", 16)} })
    


    1. Mongodbグループとプロジェクトオペレーター

    2. 私のmongodbを修復する方法は?

    3. 科学的(指数)表記を返すmongoexport

    4. マングースの子をネストするオブジェクトの親を作成します