如何在没有十六进制_id的情况下使用MongoDB查找

时间:2014-11-28 08:41:21

标签: javascript node.js mongodb binary hex

我在使用_id: "AAE45/0RQfm/VUrywfb1Gw=="在我的数据库中查找记录时遇到了很多麻烦 (例如db.collection.find( {_id: new BinData(3, "AAE45/0RQfm/VUrywfb1Gw==") }))。

使用mongo控制台中的BinData转换器可以正常工作,但拒绝在javascript文件中工作(我正在使用node.js),即使我已经安装了BinData npm和" required& #34;它

我也尝试了Binary()函数,但它一直告诉我它需要是十六进制或12字节二进制或其他东西。 .hex, .str.toString()也不会工作。 我发现了这个地方:

{"$binary": "AAE45/0RQfm/VUrywfb1Gw==", "$type": "03"}

看起来很有希望,但我不知道如何实现它。

我希望这是有道理的。任何建议都会非常感激,如果有人对我应该遵循的过程有任何见解(例如:转换为二进制,然后是十六进制,然后使用......)这将是非常棒的。

1 个答案:

答案 0 :(得分:1)

您必须将base64字符串转换为字节数组,然后使用Binary创建相应的mongodb对象。这是一些工作示例代码,它在mongodb集合中插入具有给定id的文档:

var MongoClient = require('mongodb').MongoClient;
var Binary = require('mongodb').Binary;

MongoClient.connect("mongodb://localhost:27017/example", function (err, db) {
    if (err) { return console.dir(err); }
    var collection = db.collection('test');
    // decode the base64 string into a buffer
    var buf = new Buffer("AAE45/0RQfm/VUrywfb1Gw==", 'base64');

    // create a mongo 'binary' object w/ subtype 3
    var uuid = new Binary(buf, 3);
    var doc1 = { 'hello': 'foo bar', '_id' : uuid };
    collection.insert(doc1, { w: 1 }, function (err, result) { });
});

您可能希望确保您确实要使用子类型3,因为它是 UUID类型。