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

时间:2014-11-19 13:37:47

标签: javascript node.js mongodb mongodb-query mean-stack

我正在使用node.js开发restAPI,并且我试图查询mongo集合。我可以使用字符串进行查询(例如" companyname")但我需要能够查询" _id"文件中的元素。

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

{
"_id" : new BinData(3, "MH+t3q6PD0SxVR5z7/pzfw=="), 
"companyname" : "TestCompany",
"databasename" : "TestDataBase",
}


这就是我目前的GET方法:

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);
        });
    });
};

" id"进入该方法的是Base64字符串格式(" MH + t3q6PD0SxVR5z7 / pzfw ==")并使用该查询不返回任何内容(我假设它不是正确的类型/格式)。我的问题是如何获得" id"进入正确的格式,以便我可以使用_id?

查询mongo

我一直在寻找年龄并且似乎无法找到解决方案,并且文档似乎对任何不是24字符的十六进制ObjectId的内容都很模糊。任何帮助将非常感谢!

其他信息:

我使用节点v0.10.33并表达v4.x

我使用的mongo驱动程序只是节点的基本javascript mongo驱动程序。
(见http://docs.mongodb.org/ecosystem/drivers/node-js/

2 个答案:

答案 0 :(得分:3)

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

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

现在我可以像这样查询数据库:

collection.findOne({'_id' : GUID}, function(err, item) {
                    res.send(item);
                });

答案 1 :(得分:0)

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

在您当前的代码中,它搜索匹配字符串的_id(样本中的MH + t3q6PD0SxVR5z7 / pzfw ==)。