javascript - 如何使用猫鼬在Nodejs中对填充结果的子文档数组进行排序
问题描述
我想根据时间按最近的顺序检索成员提交的文章。具有提交文章的_id 数组的成员模式。以下是成员和文章的架构 -
成员沙马
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const MemberSchema = new Schema({
uid:{
type:String,
required:[true,'Must Required']
},
name:{
type:String,
default:[true,'Anonymous']
},
email:{
type:String,
required:[true,'Email Must Required']
},
profileimg:{
type:String ,
required:[true,'Profile Image Must Required']
},
notes:{
type:String,
default:[true,'Write your Notes Here']
},
country:{
type:String,
default:[true,'America']
},
profession:{
type:String,
default:[true,'Developer']
},
experience:{
type:String,
default:[true,'5']
},
article:[{_id:{type : mongoose.Schema.Types.ObjectId,ref : 'Article'}}]
});
const Member = mongoose.model('member',MemberSchema);
module.exports = Member;
文章架构
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ContentCardSchema = new Schema({
cardtitle : String,
cardbody : {
type:String
}
});
const ArticleSchema = new Schema({
_id:mongoose.Schema.Types.ObjectId,
author:{
type: mongoose.Schema.Types.ObjectId, ref: 'member' ,
required:[true,'UID Must Required']
},
status:{
type:String,
default:'PENDING'
},
category:{
type:String,
default:'Other'
},
title:{
type:String,
default:'Anonymous'
},
body:[ContentCardSchema],
thumbimg:{
type:String,
required:[true,'Thumb Image Must Required']
},
date: {
type: Date,
default:Date.now
}
});
const Article = mongoose.model('Article',ArticleSchema);
module.exports = Article;
时间存储在 Article Schema 中,而不是 Member Schema 的数组中。我想先在最近的文章中得到输出。
下面是排序但不工作的猫鼬填充操作。
//Get Article Submitted by their Author using uid
router.get('/author/:uid',(req,res,next)=>{
Member.findOne({uid:req.params.uid},'article').populate('article._id','title category thumbimg')
.exec()
.then((result)=>{
res.status(200).json(result);
})
.catch(err=>{
res.send(404).json({error:err});
})
});
解决方案
//Get Article Submitted by their Author using uid
router.get('/author/:uid',(req,res,next)=>{
Member.findOne({uid:req.params.uid},'article')
.populate({path:'article._id',select: 'title category thumbimg', options: {sort : {yourfieldname :1}})
.exec()
.then((result)=>{
res.status(200).json(result);
})
.catch(err=>{
res.send(404).json({error:err});
})
});
试试上面。希望这会有所帮助。
推荐阅读
- amazon-web-services - AWS CloudWatch Logs Stream - 如何配置 awslogs 以将每天新的日志流从同一实例写入同一日志组?
- sql - 在 Big Query 中使用 SQL 将值拆分为当前日期和下一个日期
- aframe - a-frame - 失去对圆锥 radiusBottom 和 radiusTop 的控制
- python - 如何将描述时间的字符串转换为秒?
- python - 拖放/移动到不适用于 Selenium (draggable='false')
- javascript - 打印过滤后的数据得到不同的结果
- c++ - 如何在 Windows 中构建 opus.lib?
- php - 如何纠正 PHP 在本地服务器中重定向太多次的说法?
- android - 如何在片段中添加深度链接?
- python - 当我在 HTML 中使用变量内容时(来自 Python、Flask)