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 聚合查询深度嵌套数组删除空结果并填充引用