MongoDB/Mongoose:在填充字段中排序

Posted

技术标签:

【中文标题】MongoDB/Mongoose:在填充字段中排序【英文标题】:MongoDB/Mongoose: Sorting within a populated field 【发布时间】:2021-04-19 12:08:53 【问题描述】:

我对 MongoDB 很陌生,我无法找到以下解决方案:

我正在尝试按照人员的等级对人员进行排序。

CollectionPerson: _id, name, rank_id

CollectionRank: _id, RankName, level

我要完成的任务是按等级顺序获取列表。

任何解决方案或方向都会很好。

/编辑:

我的模特:

const RankSchema = new Schema(
    level: Number,
    dgGrp: Number,
    dgSold: String,
    dgNATO: String,
    hut: 
        bezX: String,
        bezM: String,
        bezS: String,
        img: String
    ,
    lut: 
        bezX: String,
        bezM: String,
        bezS: String,
        img: String
    ,
    mut: 
        bezX: String,
        bezM: String,
        bezS: String,
        img: String
    
);

const PersonalSchema = new Schema(
    name: 
        type: String,
        required: true,
    ,
    vname: String,
    pNum: 
        type: String,
        default: '01010101',
    ,
    pKenn: 
        type: String,
        default: '010101-A-01010',
    ,
    dg: 
        type: Schema.Types.ObjectId,
        required: true,
        ref: 'Rank'
    ,
    uni: String,
    sex: String,
    konf: String,
    adresse: 
        str: String,
        plz: Number,
        ort: String,
        land: String,
        staat: String
    
);

我的查询:

const personal = await Personal.find().populate( path: 'dg', options:  sort:  level: 1   );

【问题讨论】:

您好,欢迎来到 ***。请告诉我们您已经尝试过什么 您好,阿巴斯,感谢您的回复。我编辑了最初的帖子,希望能把事情弄清楚。 【参考方案1】:

在获取基本文档的查询已经执行后,Mongoose 在客户端完成填充。因此,已经对基础文档进行了排序(如果需要)。

你可以:

自己构建一个聚合管道,$lookup 和 $sort。 让 Mongoose 填充您的文档,然后在您的应用程序中按照您的意愿重新排序。

【讨论】:

谢谢您的回复。我将如何在 nodejs 中实现聚合?我想出了下面的数据库字符串: db.getCollection('personals').aggregate([$lookup: from: "ranks", localField: "dg", foreignField: "_id", as: "rank" ,$unwind: "$rank",$sort:"rank.dgGrp":-1 ,"rank.level":-1]) 欢迎提出新问题。

以上是关于MongoDB/Mongoose:在填充字段中排序的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个字段值 mongodb mongoose 从文档中排除字段

MongoDB/Mongoose - 仅当某个字段是唯一的时才将对象添加到对象数组中

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

日期字段上的 MongoDB/Mongoose 唯一约束

mongoDb/Mongoose:使 emailId 唯一字段[重复]

填充多个参考(子文档)并选择特定字段