在不使用GridFS的情况下将图像存储在MongoDB中的文档中

时间:2014-05-20 16:56:13

标签: mongodb bson

假设我有一个名为Items的集合。我试图完成这样的文档结构:

{
    "itemName": "Google Glass"
    "description": "Awesome Gadget"
    "*some_picture*": "*some_picture_object*"
}

我要存储的图像不会超过BSON文档的16MB上限,所以我不想使用GridFS。我怎样才能完成上面的结构?我是mongoDB的新手,很遗憾

2 个答案:

答案 0 :(得分:1)

我在文档中包含图像数据的字段使用BinData格式。确切的用法取决于使用的语言。

对于PHP,从PHP手册http://www.php.net/manual/en/class.mongobindata.php获取的用例示例代码(集合中的商店图像文件):

<?php

$profile = array(
    "username" => "foobity",
    "pic" => new MongoBinData(file_get_contents("gravatar.jpg"), MongoBinData::GENERIC),
);

$users->save($profile);

?>

Perl http://api.mongodb.org/perl/current/MongoDB/DataTypes.html#Binary%20Data

 # non-utf8 string
    my $string = "\xFF\xFE\xFF";

    $collection->insert({"photo" => \$string});

上一个答案包含使用Python在MongoDB中保存图像的示例代码:saving picture to mongodb

答案 1 :(得分:0)

在“some_picture”中存储图像的字节(字符串)不应该阻止你(除了bson文档的上限之外)。当您选择文档并获取字节时,您将完全按照从磁盘读取字节时的方式对待它。

考虑一下,如果不使用$ project,在迭代你的集合时,必须通过网络发送图像(整个文档通过网络发送,除非你使用聚合管道或map / reduce)

在不知道您使用的语言以提供示例的情况下,我可以回答这个问题。