如何解决$ sort在聚合管道mongo中不起作用
我一直在解决这个问题,我完全不知道为什么这行不通。
我有一个庞大的“课程”集合,大约有1200万个文档,我想做并汇总其上的管道。这是我的代码:
const records = await Course.aggregate([
{
$match: { swimmer: ObjectId('5fa750d9c4a9ca53c5347dc6') },},{
$sort: { time: 1 },{
$group: {
_id: {
season: '$season',bassin: '$bassin',type: '$type',disance: '$distance',course: { $first: '$$ROOT' },
])。allowDiskUse(true);
对于这个管道来说,只是找到我是否退出了排序阶段,但是不可能对此做出任何回应……代码待定,直到它引发我这个错误为止:
UnhandledPromiseRejection警告:MongoNetworkTimeoutError:与XXX.XXX.XX.XX的连接11:XXXX超时
我在排序之前先对数据进行匹配,以避免进行大范围的排序,仅排序大约200个文档,并且有一个准时索引
我真的不明白为什么这个聚合不能将结果发送给我...
有我的架构:
const courseSchema = new mongoose.Schema({
type: {
bassin: {
type: String,enums: ['25M','50M'],required: [true,'Une course doit avoir une taille de bassin'],nage: {
type: String,enums: ['NAGE_LIBRE','BRASSE','DOS','PAPILLON','QUATRE_NAGES'],'Une course doit avoir un type de nage'],distance: {
type: String,enums: ['50M','100M','200M','400M','800M','1500M'],'Une course doit avoir une distance'],time: { type: Number,'Une course doit avoir un temps'] },tempsPassages: {
type: Map,of: Number,date: { type: Date,'Une course doit avoir une date'] },season: {
type: Number,min: [2000,'La saison ne peut être inférieur à 2000'],max: [
new Date().getFullYear() + 1,`La saison ne peut être supérieur à ${new Date().getFullYear() + 1}`,],'Une course doit avoir une saison'],place: { type: String,lowercase: true,trim: true },niveauCompetition: {
type: String,enums: ['DEP','REG','NAT','ZON','INT'],// required: [true,'Une course doit avoir un niveau de compétition'],swimmer: {
type: mongoose.Schema.ObjectId,ref: 'Swimmer','Une course doit avoir un nageur'],club: {
name: {
type: String,'Un club doit avoir un nom'],trim: true,// unique: [true,'Nom de club déjà existant'],_id: {
type: mongoose.Types.ObjectId,ref: 'Club','Un club doit avoir un identifiant FFN'],departement: {
type: String,'Un club doit avoir un département'],enum: enums.EDepartement,region: {
type: String,'Un club doit avoir un région'],enum: enums.ERegion,country: {
type: String,enum: ['FRANCE'],default: 'FRANCE',notes: {
country: Number,region: Number,departement: Number,club: Number,swimmerAge: {
type: Number,"L'age du nageur doit etre fourni"],swimmerCategory: {
type: String,'La catégory du nageur doit etre fournie'],enums: ['AVENIRS','JEUNES','JUNIORS','SENIORS'],swimmerSex: {
type: String,'Le sexe du nageur doit etre fournie'],enums: ['F','M'],});
数据库中有一个文档课程的例子 enter image description here
我试图按swimmerAge进行排序,而不是按时间排序,但一切正常,但按季节出现了同样的问题...
感谢您对我的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。