将照片存储在“ MongoDB”中并将其分配给一个文档

时间:2018-12-20 13:08:14

标签: c# mongodb mongodb-.net-driver gridfs

我正在使用c#驱动程序(2.7.2)mongoDBGridFS来存储二进制文件。

我想将一组照片/图片(通常为binary文件)存储在一个集合中,这些集合是另一个文档(与该文档匹配)的子代-换句话说,每个文档都有自己的一组照片)。

说我在这样的集合中有一个文档:

{
    "_id" : ObjectId("5c1b6ba0681ecb1bf8d59f06"),
    "Name" : "John",
    "Surname" : "Doe",
    "Height" : 180,
    "Weight" : 100,
    "Photos" : [
        // ????
    ]
}

我在Photos部分中写了问号,因为我不知道它们将如何存储在mongoDB中。 我的文档应将其照片保存在数据库中。假设我有这样的本地照片集:

C:\Photos\JohnDoe\1.jpg
C:\Photos\JohnDoe\2.jpg
C:\Photos\JohnDoe\3.jpg

我的models类是这样的:

public class Employee
{
    [BsonId]
    public ObjectId IDEmployee { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public double Height { get; set; }
    public double Weight{ get; set; }

    public List<Photo> Photos { get; set; }
}

public class Photo
{
    [BsonId]
    public ObjectId IDPhoto { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public DateTime CreatedAt { get; set; }
}

Photo拥有自己的ID[BsonId]),因为我想有机会对其进行修改。例如添加说明。

我用于测试事物的代码如下:

var client = new MongoClient();
var database = client.GetDatabase("Test");
var collection = database.GetCollection<Employee>("EmployeeCollection");

var bucket = new GridFSBucket(database, new GridFSBucketOptions
{
    BucketName = "photos",
    ChunkSizeBytes = 1048576, // 1MB
    WriteConcern = WriteConcern.WMajority,
    ReadPreference = ReadPreference.Secondary
});

string path = @"C:\Photos\JohnDoe\1.jpg";

using (var stream = bucket.OpenUploadStream(path))
{
    var id = stream.Id;

    // How to store this file in a database ??

    stream.Close();
}

第一件事-我不知道我的Photo模型类是否应该与binary files进行一些额外的接触。

第二件事-我不知道如何编写适当的代码将这些照片存储在mongoDB中。

我想使用OpenUploadStream()方法来存储照片。有人可以提供例子吗?

编辑

实际上,任何利用mongoDB存储二进制文件的方式(不仅是OpenUploadStream()方法)都将受到赞赏。

0 个答案:

没有答案
相关问题