尝试使用mongodb读取nodejs中的数据,mongodb使用C#with GUI持久化

尝试使用mongodb读取nodejs中的数据,mongodb使用C#with GUI持久化,c#,node.js,mongodb,uuid,bson,C#,Node.js,Mongodb,Uuid,Bson,我已经看到了一些关于这个问题的问题,但是没有一个能直接解决这个问题 因此,场景是有一个基于C#的API,它将数据写入mongodb实例,并使用GUID作为mongo中的\u id,例如,它看起来像: “\u id”:新的BinData(3,+jscvebAl0+NO0n1WySLTQ==”, 所以假设它不会改变,它总是那个数据类型,对此我无能为力 因此,在nodejs中,我读入了一个文档,其中包含一些与其他资源相关的UUID,然而,当我使用nodejs 2.0驱动程序读入文档时,UUID变量会作

我已经看到了一些关于这个问题的问题,但是没有一个能直接解决这个问题

因此,场景是有一个基于C#的API,它将数据写入mongodb实例,并使用GUID作为mongo中的
\u id
,例如,它看起来像:

“\u id”:新的BinData(3,+jscvebAl0+NO0n1WySLTQ==”,

所以假设它不会改变,它总是那个数据类型,对此我无能为力

因此,在nodejs中,我读入了一个文档,其中包含一些与其他资源相关的UUID,然而,当我使用nodejs 2.0驱动程序读入文档时,UUID变量会作为GUID字符串读入,如下所示:

“SomedField”:“c1489470-4e04-49ba-ae91-A20C0009254E5”

因此,如果我直接使用
{“\u id”:someIdField}
,它找不到匹配的文档,我假设它是因为它需要与二进制表示进行比较,而不是字符串表示,但是我似乎无法将该字符串转换为有价值的内容

我尝试使用
npm uuid
包进行解析,然后像这样使用缓冲区:

var bytes = Uuid.parse(uuid);
return new Binary(new Buffer(bytes), 3);

然而,这似乎不起作用,我也尝试过其他解决方案,包括base64编码,但似乎没有任何效果。那么我还需要在这里做什么呢?

您的
\u id
存储为BSON二进制数据类型

当我使用nodejs 2.0驱动程序读入文档时,UUID变量作为GUID字符串读入

我认为这是对它们进行字符串化的产物——它们不能作为BinData存储在C#中,并由Node.js作为字符串检索


使用该类在Node.js中构造BinData值。

好吧,我已经让它工作了,这很痛苦,但是在查看了UUIDHelpers和stackoverflow上的一些其他代码之后,似乎这就是我运行我的东西所需要的方法:

module.exports = function(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 buffer= new Buffer(hex, "hex");
    return new Binary(buffer, Binary.SUBTYPE_UUID_OLD);
};

这应该将文本guid转换为传统guid的二进制表示。

这很可能是日志过程的一部分,日志过程会对显示guid的guid进行字符串化,但是如上所述,默认情况下,它找不到匹配的文档,我只是尝试将变量直接添加到
二进制(新缓冲区(someIdValue),3)
这也不起作用。