如何使用没有hex_id的MongoDB查找

我在数据库中用_id: "AAE45/0RQfm/VUrywfb1Gw=="查找logging很麻烦_id: "AAE45/0RQfm/VUrywfb1Gw==" (例如db.collection.find( {_id: new BinData(3, "AAE45/0RQfm/VUrywfb1Gw==") }) )。

它在mongo控制台中使用BinData转换器工作正常,但拒绝在JavaScript文件(我使用node.js)内工作,即使我已经安装了BinData npm和“需要”它。

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

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

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

我希望这是有道理的。 任何build议将非常感激,如果任何人有什么过程我应该遵循(如:转换为二进制,然后hex,然后使用…),这将是太棒了。

您必须将base64string转换为字节数组,然后使用Binary来创build相应的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) { }); }); 

你可能想确保你真的想使用子types3,因为它是旧的 UUIDtypes。