我在使用_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"}
看起来很有希望,但我不知道如何实现它。
我希望这是有道理的。任何建议都会非常感激,如果有人对我应该遵循的过程有任何见解(例如:转换为二进制,然后是十六进制,然后使用......)这将是非常棒的。
答案 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类型。