将mongoose聚合结果转换为特定的文档模式类型可以通过使用mongoose的Model.populate()
方法来实现。
Model.populate()
方法可以将聚合结果中的引用字段替换为对应的文档对象。它接受一个参数,即要替换的字段路径,可以是单个字段或多个字段的数组。该方法会查询对应的文档并将其替换到聚合结果中。
以下是一个示例代码:
const mongoose = require('mongoose');
// 定义模式
const authorSchema = new mongoose.Schema({
name: String,
books: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Book' }]
});
const bookSchema = new mongoose.Schema({
title: String,
author: { type: mongoose.Schema.Types.ObjectId, ref: 'Author' }
});
// 创建模型
const Author = mongoose.model('Author', authorSchema);
const Book = mongoose.model('Book', bookSchema);
// 聚合查询
Author.aggregate([
{
$lookup: {
from: 'books',
localField: 'books',
foreignField: '_id',
as: 'books'
}
}
])
.then(authors => {
// 将聚合结果中的引用字段替换为文档对象
return Author.populate(authors, { path: 'books' });
})
.then(populatedAuthors => {
console.log(populatedAuthors);
})
.catch(error => {
console.error(error);
});
在上述示例中,我们定义了一个作者(Author)模式和一本书(Book)模式。作者模式中的books
字段是一个引用了书模式的数组。我们使用$lookup
操作符进行聚合查询,将作者模式中的books
字段替换为对应的书文档。然后使用Model.populate()
方法将聚合结果中的引用字段替换为文档对象。
这样,我们就可以将mongoose聚合结果转换为特定的文档模式类型。
领取专属 10元无门槛券
手把手带您无忧上云