如何解决如何返回具有数组的文档包含多个具有相似字段的对象
我有这样的查询
const papers = await Paper.aggregate([
{ $match: filter },{
$lookup: {
"from": "reviews","localField": "review","foreignField": "_id","as": "review"
}
},{ $unwind: "$review" },{ $match: { "review.reviews.reviewStatus": "SUBMITTED" } },])
返回类似
的结果[
{
_id: 5f721ca3909430bf5bf38133,manuscript: {
keywords: [Array],title: 'Viverra aliquet eget sit amet tellus cras adipiscing enim. ',abstract: 'Ultricies leo integer',authors: [Array],fundingInfo: ''
},review: {
_id: 5f721ca5909430bf5bf38138,reviews: [Array]
}
}
]
review 对象内的 reviews 数组包含对本文的不同审阅者审阅。 reviewStatus 会根据评论者的评论进行更改。
{
_id: 5f721ca5909430bf5bf38138,reviews: [
{
invitationStatus: 'ACCEPTED',reviewType: 'MINOR_REVISION',reviewStatus: 'SUBMITTED',_id: 5f9d2fa9909430bf5bf3814a
},{
invitationStatus: 'PENDING',reviewType: 'MAJOR_REVISION',reviewStatus: 'SAVED',_id: 5f9d38223357c83460cb77df
},{
invitationStatus: 'ACCEPTED',_id: 5f9d39af3357c83460cb77e2,}
]
}
现在,我只想获取具有两个或多个 reviewStatus 值已提交
的论文解决方法
您可以在$expr
之后的$match
阶段的$lookup
阶段使用{{3}}运算符,该运算符将使用带有以下内容的评论数组过滤纸质文档
至少有两个提交。以下操作显示了如何进行管道操作:
const papers = await Paper.aggregate([
{ '$match': filter },{
'$lookup': {
"from": "reviews","localField": "review","foreignField": "_id","as": "review"
}
},{ '$addFields': {
'review': { '$arrayElemAt': ['$review',0] }
} },{ '$match': {
'$expr': {
'$gt': [
{ '$size': {
'$filter': {
'input': '$review.reviews','cond': { '$eq': ['$$this.reviewStatus',"SUBMITTED"] }
}
} },1
]
}
} }
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。