Наконец-то после всех исследований получен ответ. Опубликуйте его ниже, чтобы другие, сталкивающиеся с той же проблемой, могли воспользоваться. Формат Bindata - BSON, а тот, который виден из оболочки mon go, имеет шестнадцатеричную форму 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.