Mongo Shell конвертирует строку в nuuid и сравнивает - PullRequest
0 голосов
/ 05 сентября 2018

Я бы хотел сделать следующее:


    db
    .getCollection('COLLECTION')
    .find({ $where : function() { return NUUID(this.Col1) != this.Col2 }})

Где Col1 содержит строки NUUID, а Col2 содержит NUUID.

Я бы хотел строки, в которых значение NUUID Col1 (которое является строкой) не равно Col2.

Я получаю сообщение об ошибке: ReferenceError: NUUID is not defined

1 Ответ

0 голосов
/ 27 ноября 2018

Используя https://github.com/mongodb/mongo-csharp-driver/blob/master/uuidhelpers.js, решение:

db
.getCollection('TestColl')
.find({$where: function(){

    function CSUUID(uuid) {
        var hex = uuid.replace(/[{}-]/g, ""); // remove extra characters
        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 base64 = HexToBase64(hex);
        return new BinData(3, base64);
    }

    function HexToBase64(hex) {
        var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        var base64 = "";
        var group;
        for (var i = 0; i < 30; i += 6) {
            group = parseInt(hex.substr(i, 6), 16);
            base64 += base64Digits[(group >> 18) & 0x3f];
            base64 += base64Digits[(group >> 12) & 0x3f];
            base64 += base64Digits[(group >> 6) & 0x3f];
            base64 += base64Digits[group & 0x3f];
        }
        group = parseInt(hex.substr(30, 2), 16);
        base64 += base64Digits[(group >> 2) & 0x3f];
        base64 += base64Digits[(group << 4) & 0x3f];
        base64 += "==";
        return base64;
    }

    return CSUUID(this['Col1']).toString() != this['Col2'].toString()

    }
})
...