Robo 3T:在将集合导出到 JSON 时填充 Javascript 函数调用的实际值

Robo 3T: Populate actual values of Javascript functions calls while Exporting Collections to JSON

我是 Mongo 的新手,需要将集合导出到 JSON。我 运行 下面的代码导出到 JSON 并且工作正常。但主要问题是有些函数的值在 Robo3T GUI 中与导出的值不同。

var cursor = db.getCollection('foo').find({}, {});
while(cursor.hasNext()) {
    print(tojson(cursor.next()))
}

但主要问题是有些函数的值在 Robo3T GUI 中与导出的值不同。 前任: “_id”:BinData(3,"u9LO8nOI6UmsYJUin/DH8w==") 是导出到 JSON 的内容,而在 GUI 中它是 ("f2ced2bb-8873-49e9-ac60-95229ff0c7f3").

我想导出在 Robo3T GUI 上看到的值。

经过一番研究终于得到了答案。将其张贴在下面,以便面临相同问题的其他人可以利用。 Bindata 格式为 BSON,从 mongo shell 可见的格式为十六进制形式,如 NUUID、CSUUID、PYUUID 或其他格式。 我想基本上将 BinData 转换为 NUUID 格式。 运行 控制台上的以下两个功能:

   function Base64ToHex(base64) {
        var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        var hexDigits = "0123456789abcdef";
        var hex = "";
        for (var i = 0; i < 24; ) {
            var e1 = base64Digits.indexOf(base64[i++]);
            var e2 = base64Digits.indexOf(base64[i++]);
            var e3 = base64Digits.indexOf(base64[i++]);
            var e4 = base64Digits.indexOf(base64[i++]);
            var c1 = (e1 << 2) | (e2 >> 4);
            var c2 = ((e2 & 15) << 4) | (e3 >> 2);
            var c3 = ((e3 & 3) << 6) | e4;
            hex += hexDigits[c1 >> 4];
            hex += hexDigits[c1 & 15];
            if (e3 != 64) {
                hex += hexDigits[c2 >> 4];
                hex += hexDigits[c2 & 15];
            }
            if (e4 != 64) {
                hex += hexDigits[c3 >> 4];
                hex += hexDigits[c3 & 15];
            }
        }
        return hex;
    }

BinData.prototype.toNUUID = function () {
    var hex = Base64ToHex(this.base64()); // don't use BinData's hex function because it has bugs in older versions of the shell
    var a = hex.substr(6, 2) + hex.substr(4, 2) + hex.substr(2, 2) + hex.substr(0, 2);
    var b = hex.substr(10, 2) + hex.substr(8, 2);
    var c = hex.substr(14, 2) + hex.substr(12, 2);
    var d = hex.substr(16, 16);
    hex = a + b + c + d;
    var uuid = hex.substr(0, 8) + '-' + hex.substr(8, 4) + '-' + hex.substr(12, 4) + '-' + hex.substr(16, 4) + '-' + hex.substr(20, 12);
    return uuid;
}

然后在提取中调用函数,如下所示:

var cursor = db.getCollection('collectionname').find({});
while(cursor.hasNext()) {
var b=cursor.next()
b._id=b._id.toNUUID()
    print(tojson(b))
}

这将以所需的 NUUID 格式或 JSON 中的列提取数据。