Хранение фотографий в `MongoDB` и назначение их одному документу - PullRequest
0 голосов
/ 20 декабря 2018

Я использую c# драйвер (2.7.2) до mongoDB и GridFS для хранения двоичных файлов.

Я хотел бы сохранить набор фотографий / картинок (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() для хранения фотографий.Может кто-нибудь привести пример?

РЕДАКТИРОВАТЬ

На самом деле приветствуется любой способ (не только OpenUploadStream() метод) хранения двоичного файла с использованием mongoDB.

...