【发布时间】:2011-11-07 23:47:16
【问题描述】:
如何从 现有 mongo db 文档中获取二进制字段?
在 MongoDB 控制台中,如果我对选择的记录进行查找,我会得到:
{_id:ObjectId("1234"),"cover_data" : BinData(2,"ozkAAP/Y/+AAEEpGSUYAAQEBAJYAlgAA/+IFpElDQ19QUk9GSUxFAAEBAAAFlGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAA ..... )
在我们的 web 服务器上的 python 中,当我们使用 pymongo 进行查找时,它会将该字段作为二进制文件获取,而 json_pickle 似乎会自动将其转换为 base64,唉,当发送回客户端时,图像看起来很棒。当我将生成的 base64 与 node.js mongo 驱动程序进行比较时,它完全不同,并且无法正确显示图像。
这是 Node.JS 的代码:
cb = function(comp) {
thumb_buffer = new Buffer(comp.thumbnail_data.value(),'binary');
comp.thumbnail_data = thumb_buffer.toString('base64');
}
在这里的示例和测试用例中:https://github.com/christkv/node-mongodb-native 我没有看到任何我正在尝试做的示例。似乎有 BSON 反序列化器和用于整个 BSON 对象的 BinaryParser。我只针对一个字段进行了尝试,但出现了分段错误。
我尝试过的事情的运行列表:
mongo_compositions.find {_id:{$in:ids}},{},(err,compositions) ->
for comp in compositions
do(comp) =>
thumb_buffer = comp.thumbnail_data.value(true)
test_buffer = Binary(thumb_buffer)
console.log test_buffer
console.log test_buffer.toString('base64')
#thumb_buffer = BSON.deserialize thumb_buffer
#thumb_buffer.write(comp.thumbnail_data.value(true))
#comp.thumbnail_data = thumb_buffer.toString('base64')
#cover_buffer = new Buffer(comp.cover_data.value(),'binary')
#console.log thumb_buffer.toString('base64')
#console.log "#{comp.composition_author} - #{comp.thumbnail_data.length}"
#comp.cover_data = cover_buffer.toString('base64')
【问题讨论】:
-
这里没有问题。您是否尝试使用 node-mongodb-native 从 GridFS 读取文件?
-
不,我正在尝试从对象中读取二进制字段。我希望 cover_data 字段包含 base64 字符串。在数据库中,类型是 BinData(2)。
标签: javascript mongodb node.js