MongoDB筛选排除指定userid的评论并按日期降序排序问题
解决MongoDB筛选指定影片排除特定用户评论的问题
你可以通过$filter配合$sortArray实现需求,以下是两种可行写法:
方法一:使用聚合管道
db.films.aggregate([ // 匹配目标影片 { $match: { _id: ObjectId('64d69473da87c0c91ae7c596') } }, // 过滤评论并排序 { $project: { title: 1, reviews: { $sortArray: { input: { $filter: { input: "$reviews", cond: { $ne: ["$$this.userid", ObjectId('要排除的用户ID')] } } }, sortBy: { creationdate: -1 } } } } } ])
方法二:在findOne中直接实现
db.films.findOne( { _id: ObjectId('64d69473da87c0c91ae7c596') }, { title: 1, reviews: { $sortArray: { input: { $filter: { input: "$reviews", cond: { $ne: ["$$this.userid", ObjectId('要排除的用户ID')] } } }, sortBy: { creationdate: -1 } } } } )
关键说明
$filter用于遍历reviews数组,保留userid不等于指定值的评论元素,$$this代表数组中的当前元素- 先通过
$filter完成筛选,再用$sortArray对筛选后的数组按creationdate降序排列 - 替换代码中的
ObjectId('要排除的用户ID')为实际需要排除的用户ID即可
内容的提问来源于stack exchange,提问作者D. Rattansingh
相关产品推荐
相关产品推荐

