请考虑以下型号。
interface Model {
title: string
content: string
comments: {
content: string
likes?: number
subComments: {
parentCommentId: string
content: string
likes?: number
}[]
}[]
}
const post: Model = {
title: 'test',
content: 'content',
comments: [
{
content: 'level2',
likes: 3,
subComments: [
{
parentCommentId: '1',
content: 'level3',
likes: 3,
},
],
},
{
content: 'level2',
likes: 3,
subComments: [
{
parentCommentId: '1',
content: 'level3',
likes: 5,
},
{
parentCommentId: '1',
content: 'level3',
likes: 5,
},
],
},
],
}
假设我们有一个帖子,其中的评论包含子评论。
subComment的级别为3,但深度是固定的。
有没有办法用MongoClient过滤掉具有可选键“like”并且值大于3的subComments?
1条答案
按热度按时间n9vozmp41#
我不知道你到底想要什么样的输出,但是你可以尝试像这个例子一样只使用到find查询的投影:
这里有两个
$filter
和一个map。$map
将每个对象放入comments
数组,然后:content: "$$comment.content"
likes
,因为它看起来不一致,但可以使用likes: "$$comment.likes"
添加这将生成一个数组,其中只有超过3个like的对象。
这意味着它可以产生一个空的
subComments
数组。所以$map
的结果被用于另一个$filter
,以获得subComments
不为空的对象(即至少有一个评论有超过3个赞)。例如here。
在聚合查询中使用
$project
也是一样的:example