是否可以在 populate mongoose 中将缓冲区转换为 base64string?
Is it possible to convert a buffer to base64string in populate mongoose?
我有一个 mongoose Image Schema 如下:
const ImageSchema = new mongoose.Schema({
img:
{
data: Buffer,
contentType: String
}
})
mongoose.model('Image',ImageSchema)
和章节架构
const chapterSchema = new mongoose.Schema({
chapter_no:{ type: Number, min: 0, max: 50 },
published:Boolean,
u_img:{type:mongoose.Schema.Types.ObjectId, ref:"Image"}
})
mongoose.model('Chapter', chapterSchema)
我会为图片填充
Chapter.find()
.populate({
path:"u_img",
select:["img"]
})
.exec(function(err,chapters){
if(err) res.send(err)
res.send(chapters)
})
并且我正在尝试将本章中每个图像的缓冲区转换为 base64 字符串。
谁能帮帮我?有没有办法在猫鼬中对填充函数进行转换?或者我必须在 exec 函数中进行映射和转换?或者有其他方法吗?
好吧,populate
关注的领域更多的是将相关文档(在您的案例中是给定章节的图像)拼接在一起,而不是将这些文档按摩到某种可用状态。
还有一个选项可能对您有所帮助 (introduced in Mongoose 5.12):
[options.transform=null]
«Function» Function that Mongoose will call
on every populated document that allows you to transform the populated
document.
因此您可以像这样修改您的查询:
Chapter.find()
.populate({
path:"u_img",
select:["img"],
options: {
transform: doc => new Buffer(doc.data).toString('base64')
}
})
作为替代方案,您可以在 exec
函数中对缝合实体进行这种转换,如下所示:
.exec(function(err, chapters){
if(err) res.send(err)
chapters.forEach(chapter => {
chapter.img = new Buffer(chapter.img.data).toString('base64');
});
res.send(chapters)
})
...基本上按照给定的收据.
我有一个 mongoose Image Schema 如下:
const ImageSchema = new mongoose.Schema({
img:
{
data: Buffer,
contentType: String
}
})
mongoose.model('Image',ImageSchema)
和章节架构
const chapterSchema = new mongoose.Schema({
chapter_no:{ type: Number, min: 0, max: 50 },
published:Boolean,
u_img:{type:mongoose.Schema.Types.ObjectId, ref:"Image"}
})
mongoose.model('Chapter', chapterSchema)
我会为图片填充
Chapter.find()
.populate({
path:"u_img",
select:["img"]
})
.exec(function(err,chapters){
if(err) res.send(err)
res.send(chapters)
})
并且我正在尝试将本章中每个图像的缓冲区转换为 base64 字符串。 谁能帮帮我?有没有办法在猫鼬中对填充函数进行转换?或者我必须在 exec 函数中进行映射和转换?或者有其他方法吗?
好吧,populate
关注的领域更多的是将相关文档(在您的案例中是给定章节的图像)拼接在一起,而不是将这些文档按摩到某种可用状态。
还有一个选项可能对您有所帮助 (introduced in Mongoose 5.12):
[options.transform=null]
«Function» Function that Mongoose will call on every populated document that allows you to transform the populated document.
因此您可以像这样修改您的查询:
Chapter.find()
.populate({
path:"u_img",
select:["img"],
options: {
transform: doc => new Buffer(doc.data).toString('base64')
}
})
作为替代方案,您可以在 exec
函数中对缝合实体进行这种转换,如下所示:
.exec(function(err, chapters){
if(err) res.send(err)
chapters.forEach(chapter => {
chapter.img = new Buffer(chapter.img.data).toString('base64');
});
res.send(chapters)
})
...基本上按照给定的收据