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 中的列提取数据。
我是 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 中的列提取数据。