我在一個名為 PostModel 的類似社交媒體的網站上發布了一個 mongoose 模型:
{
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
}
我想根據喜歡的數量對查找查詢中的所有視頻進行排序,這將是“喜歡”陣列的長度。如果兩個帖子的點贊數相同,我想按評論數排序,或者按“評論”陣列的長度排序。
問題是它不起作用。這是我嘗試過的:
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 }
})
這個查詢沒有給出任何錯誤,但根本沒有對結果陣列進行排序。因此,可以確認投影實際上發生在貓鼬中的排序之后。
在這種情況下,我應該如何按喜歡的數量和評論的數量對結果陣列進行排序?
uj5u.com熱心網友回復:
我嘗試了這種聚合,它對我來說非常適合您的資料:
PostModel.aggregate([
{
'$set': {
'likes': {
'$size': '$likes'
},
'comments': {
'$size': '$comments'
}
}
}, {
'$sort': {
'likes': -1,
'comments': -1
}
}
])
我使用 Mongo Compass 程式構建了這個聚合,它讓你可以通過逐步構建它來實時查看聚合的作業情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/376547.html
標籤:javascript 数组 MongoDB 猫鼬 nosql
