【问题标题】:Store images within a document in MongoDB without using GridFS在不使用 GridFS 的情况下将图像存储在 MongoDB 中的文档中
【发布时间】:2014-05-20 16:56:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: mongodb bson


    【解决方案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});
    

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

    【讨论】:

    • 谢谢。我实际上是在控制台上使用 mongo 客户端手动处理数据库。我也在使用 node.js 和 express 但不想从那里做任何插入。有没有办法解决这个问题?再次感谢。
    • 您想从 mongo 客户端进行插入吗?为什么?
    • 现在,只是关注点分离。让我作为初学者更清楚。我希望程序只从数据库中读取
    【解决方案2】:

    不应该有任何东西阻止您(除了 bson 文档上的上限)将图像的字节(字符串)存储在“some_picture”中。当您选择文档并抓取字节时,您会像从磁盘读取字节一样对待它。

    但请考虑,如果不使用 $project,则在遍历您的集合时,必须通过网络发送图像(除非您使用聚合管道或 map/reduce,否则整个文档将通过网络发送)

    这是我可以在不知道您使用什么语言的情况下提供示例的答案。

    【讨论】:

    • 感谢您的回复。我正在使用 node.js、express 和 jam。但我想弄清楚如何将图像插入文档。对于基本数据类型,它很简单。 db.Items.insert({ "itemName" : "Google glass", "description" : "Simply Awesome" }) 但是图像的语法是什么?
    • 它是一样的(如果你不打算使用gridfs)。您的字节数据只是一个字符串,就像您的示例的其余部分一样。不过,您必须弄清楚如何在选择字节时将其转换回可用的格式。
    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2012-04-24
    • 2011-12-07
    相关资源
    最近更新 更多