我正在使用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()
方法来存储照片。有人可以提供例子吗?
编辑
实际上,任何利用mongoDB存储二进制文件的方式(不仅是OpenUploadStream()
方法)都将受到赞赏。