Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongo和Node.js:使用UUID(GUID)通过_id查找文档_Javascript_Node.js_Mongodb_Mongodb Query_Mean Stack - Fatal编程技术网

Javascript Mongo和Node.js:使用UUID(GUID)通过_id查找文档

Javascript Mongo和Node.js:使用UUID(GUID)通过_id查找文档,javascript,node.js,mongodb,mongodb-query,mean-stack,Javascript,Node.js,Mongodb,Mongodb Query,Mean Stack,我正在使用node.js开发restAPI,并尝试查询mongo集合。我可以使用字符串(例如“companyname”)进行查询,但我需要能够查询文档中的“\u id”元素 在mongo中_id当前存储如下(作为GUID): 这就是我当前的GET方法的外观: 进入该方法的“id”是Base64字符串格式(“MH+t3q6PD0SxVR5z7/pzfw==”),使用它查询不会返回任何结果(我假设它不是正确的类型/格式)。我的问题是如何将“id”转换成正确的格式,以便使用_id查询mongo 我

我正在使用node.js开发restAPI,并尝试查询mongo集合。我可以使用字符串(例如“companyname”)进行查询,但我需要能够查询文档中的“\u id”元素

在mongo中_id当前存储如下(作为GUID):


这就是我当前的GET方法的外观:

进入该方法的“id”是Base64字符串格式(“MH+t3q6PD0SxVR5z7/pzfw==”),使用它查询不会返回任何结果(我假设它不是正确的类型/格式)。我的问题是如何将“id”转换成正确的格式,以便使用_id查询mongo

我已经找了很久了,似乎找不到解决方案,文档似乎对任何不是24个字符的十六进制ObjectId的东西都很模糊。任何帮助都将不胜感激!

其他信息:

我正在使用节点v0.10.33和express v4.x

我使用的mongo驱动程序只是node的基本javascript mongo驱动程序

(在此处找到:)

您必须将GET方法中的id转换为BinData()对象,就像示例文档中显示的那样


在您当前的代码中,它搜索与字符串匹配的_id(在您的示例中为MH+t3q6PD0SxVR5z7/pzfw==)

好的,我找到了在节点中将base64字符串转换为GUID格式的解决方案,要转换它,需要完成以下操作:

var mongo.require('mongodb');
var GUID = new mongo.Binary(new Buffer(<base65String>, 'base64'), 3);

可能
findOne({u id':新的BinData(3,id)}
?我试过了,但是BinData需要是一个类型,在mongo Library中没有它的定义,
BinData
甚至来自哪里?它不是一个全局节点。你能展示导入吗?我如何将它放入BinData对象中?我似乎根本找不到任何关于它的参考,它在mongo shell中运行良好,因为它有一个de类型BinData的定义,但node js的库不知道数据是如何插入到集合中的?对于驱动程序来说,首先选择使用BinData实例有点奇怪。它是使用C#和mongo驱动程序插入其中的:-/您的问题是,您在查询中使用的数据类型与用于存储数据的类型不匹配a、 您需要弄清楚如何说服节点驱动程序创建BinData对象,或者更改C代码,以便它将数据作为stringBrilliant插入!我会仔细研究一下,我会让您知道我是怎么做的!干杯!这里有用的是添加代码,将guid/uuid转换为base64,这并不像人们想象的那么简单e、 我最终使用了“npm安装--保存slugid”然后在其上附加“==”,并将下划线转换为斜杠。这留下了一点不好的回味。我已经为这个解决方案搜索了两天。记录是由一个C#应用程序以我无法控制的旧类型3格式创建的。这就像一个没有修改的符咒。
exports.getBusinessCardData = function(req, res) {
    var id = req.params.id;
    //"id" = MH+t3q6PD0SxVR5z7/pzfw==

    tradeShowAdminDB.collection('clients', function(err, collection) {
        collection.findOne({'_id': id}, function(err, item) {
            res.send(item);
        });
    });
};
var mongo.require('mongodb');
var GUID = new mongo.Binary(new Buffer(<base65String>, 'base64'), 3);
collection.findOne({'_id' : GUID}, function(err, item) {
                    res.send(item);
                });