项目,然后在 mongoose 中对数组字段进行排序
Project and then sort in mongoose for array fields
我在一个名为 PostModel 的类似社交媒体的网站上有一个 post 的猫鼬模型:
{
caption: String,
likes: [] // array to store info about users who liked the video, basically a ref to a different model
comments: [] // array to store comment objects
}
我想根据喜欢的数量对查找查询中的所有视频进行排序,这里是“喜欢”数组的长度。如果两个 post 的点赞数相同,我想按评论数排序,否则按“评论”数组的长度排序。
问题是它不工作。这是我试过的:
PostModel.find({}, {
likes: { $size: "$likes" },
comments: { $size: "$comments" }
},
{
sort: { likes: -1, comments: -1 } // gives "cannot sort with keys that are parallel arrays" error
})
这让我相信排序发生在投影之前。为了确认,我尝试了以下查询:
PostModel.find({}, {
_l: { $size: "$likes" },
_c: { $size: "$comments" }
},
{
sort: { _l: -1, _c: -1 }
})
这个查询没有给出任何错误,但是根本没有对结果数组进行排序。所以,确认投影确实发生在猫鼬排序之后。
在这种情况下,我应该如何根据点赞数和评论数对结果数组进行排序?
我尝试了这种聚合,它对我来说非常适合你的数据:
PostModel.aggregate([
{
'$set': {
'likes': {
'$size': '$likes'
},
'comments': {
'$size': '$comments'
}
}
}, {
'$sort': {
'likes': -1,
'comments': -1
}
}
])
我使用 Mongo compass 程序构建了这个聚合,它可以让您通过逐步构建实时查看聚合的工作情况。
我在一个名为 PostModel 的类似社交媒体的网站上有一个 post 的猫鼬模型:
{
caption: String,
likes: [] // array to store info about users who liked the video, basically a ref to a different model
comments: [] // array to store comment objects
}
我想根据喜欢的数量对查找查询中的所有视频进行排序,这里是“喜欢”数组的长度。如果两个 post 的点赞数相同,我想按评论数排序,否则按“评论”数组的长度排序。
问题是它不工作。这是我试过的:
PostModel.find({}, {
likes: { $size: "$likes" },
comments: { $size: "$comments" }
},
{
sort: { likes: -1, comments: -1 } // gives "cannot sort with keys that are parallel arrays" error
})
这让我相信排序发生在投影之前。为了确认,我尝试了以下查询:
PostModel.find({}, {
_l: { $size: "$likes" },
_c: { $size: "$comments" }
},
{
sort: { _l: -1, _c: -1 }
})
这个查询没有给出任何错误,但是根本没有对结果数组进行排序。所以,确认投影确实发生在猫鼬排序之后。
在这种情况下,我应该如何根据点赞数和评论数对结果数组进行排序?
我尝试了这种聚合,它对我来说非常适合你的数据:
PostModel.aggregate([
{
'$set': {
'likes': {
'$size': '$likes'
},
'comments': {
'$size': '$comments'
}
}
}, {
'$sort': {
'likes': -1,
'comments': -1
}
}
])
我使用 Mongo compass 程序构建了这个聚合,它可以让您通过逐步构建实时查看聚合的工作情况。