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

ノードを使用してmongodbBinary_idをLUUIDに変換する

    したがって、最初に$binaryをオフにします およびBinData 基本的に同じもので、異なる方法で書かれ、表現されています。あなたの例とこのリファレンスを使用して、「MongoShell」モードでそのように書くことができます:

    BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
    

    または、次のようになる「厳密な」モードの場合:

    { "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" }
    

    さて、ここでのタイプ3は、実際にはBSON仕様による(バイナリタイプの)サブタイプ3を指します。これは、これが「UUID(古い)」サブタイプであることを意味します。上記の参照によると、文字列自体は実際にはbase64です。 バイナリ文字列の表現。このため(私は推測しています)robomongo 基本的にUUIDを変換し、データを参照しているときに表示します。代わりに、mongoで手動で実行してみましょう。 シェル、最初にそれを16進数に変換します:

    > var foo = BinData(3, "AAGOBh3pqkWvtaK8AO2U9w==")
    > foo.hex()
    00018e061de9aa45afb5a2bc00ed94f7
    

    それでは、それをUUIDコンストラクターにプラグインして、逆変換されるかどうかを確認しましょう。

    > var uuid = new UUID("00018e061de9aa45afb5a2bc00ed94f7")
    > uuid
    BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
    

    そして、それは-すべてのrobomongo 読みやすくするためにダッシュを追加しています。完全を期すために、他の例では、ダッシュを削除してUUIDを作成し、BinDataを表示します。 バージョンを作成して元に戻す:

    > var bar = UUID("d72f21fe47808040ab3da1fb01045d3a")
    > bar
    BinData(3,"1y8h/keAgECrPaH7AQRdOg==")
    > bar.hex()
    d72f21fe47808040ab3da1fb01045d3a
    

    したがって、あなたがする必要があるのは、ノード内のbase64エンコーディング間で自分で変換することです。 node.jsがありません テストする環境ですが、サイトの他の場所で以前にカバーされているようです。

    編集:

    これは、バイナリを16進UUIDに変換するNode.JSの動作関数です:

    function Bin2HexUUID(bin){
        var hex = new Buffer(bin, 'base64').toString('hex');
        return hex.replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, function (){
            return arguments[1]+"-"+arguments[2]+"-"+arguments[3]+"-"+arguments[4]+"-"+arguments[5];
        });
    }
    
    //use example
    var binary_id = { "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" };
    console.log(Bin2HexUUID(binary_id.$binary)); //00018e06-1de9-aa45-afb5-a2bc00ed94f7
    



    1. MongoDB C#ドライバーを使用してMongoDBコレクションが作成された日付を取得するにはどうすればよいですか?

    2. Redis:n個のネイバーキーを並べ替えて取得する

    3. 公式のPHPDockerイメージアプローチを使用してphp-redis拡張機能をインストールするにはどうすればよいですか?

    4. CentOS8へのMongoDBのインストール