MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak zamienić ciąg szesnastkowy na liczbę w mongodb?

Taka funkcja jeszcze nie istnieje, zobacz Obsługa konwersji bazy w $convert

Możesz zdefiniować funkcje w ten sposób:

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] } }] }
               ]
            }
         }
      }
   };
}

a następnie użyj go, na przykład tak:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nowicjusz nie może uzyskać JSON

  2. Czy można wielokrotnie wysyłać zapytania do bazy danych MongoDB na żądanie?

  3. Zbiorcza aktualizacja dokumentów w MongoDB

  4. MongoDB operator zapytań typu $

  5. Schemat Mongoose dla współrzędnych geoJson