我正在使用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/)
答案 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 ==)。