我想知道Mongoose中是否有一种方法可以将匹配的localField / foreignField的数量作为虚拟字段,而无需通过虚拟填充检索所有文档 .

例:

const ForumThreadSchema = new Schema({
    code: { type: Number, required: true, unique: true },
    title: { type: String, min: [10, 'Too short title'], max: [200, 'Too long title'], required: true },
    description: { type: String, min: [10, 'Too short description'], max: [2000, 'Too long description'], required: true },
    creation_date: { type: Date, default: Date.now, required: true },
    updated_date: { type: Date, default: Date.now, required: true },
    _authorId: { type: Schema.ObjectId, ref: 'User', required: true },
    _forumId: { type: Schema.ObjectId, ref: 'Forum', required: true }
}, {
    collection: 'ForumThreads',
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});

const ForumMessageSchema = new Schema({
    code: { type: Number, required: true, unique: true },
    content: { type: String, min: [10, 'Too short message content'], max: [2000, 'Too long message content'], required: true },
    creation_date: { type: Date, default: Date.now, required: true },
    update_date: { type: Date, default: Date.now, required: true },
    _authorId: { type: Schema.ObjectId, ref: 'User', required: true },
    _forumThreadId: { type: Schema.ObjectId, ref: 'ForumThread', required: true },
    _parentMessageId: { type: Schema.ObjectId, ref: 'ForumMessage' }
}, {
    collection: 'ForumMessages'
});

论坛帖子架构上的虚拟填充会检索我所有的邮件文档 . 如果可能的话,我需要一个只包含数字的虚拟字段 .

ForumThreadSchema
.virtual('messages', {
    ref: 'ForumMessage',
    localField: '_id',
    foreignField: '_forumThreadId'
});

ForumThreadSchema
.virtual('messages_count')
.get(function() {
    return this.messages.length;
});

第二个虚拟仅在第一个虚拟人口完成时才有效 . 我也想保留虚拟填充,但我想找到一种方法来获取匹配文档的数量而不使用它(在服务器API中不需要所有消息文档但只需要它们的大小) . 可能吗?