尝试使用mongodb读取nodejs中的数据,mongodb使用C#with GUI持久化
我已经看到了一些关于这个问题的问题,但是没有一个能直接解决这个问题 因此,场景是有一个基于C#的API,它将数据写入mongodb实例,并使用GUID作为mongo中的尝试使用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变量会作
\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)
这也不起作用。