2016-09-07 89 views
0

通過字的至少出現次數排序結果我的視頻集合:貓鼬:在陣列

var VideoSchema = new mongoose.Schema({ 
    url: { 
    type: String, required : true 
    }, 
    orderBy: { 
    type: Number 
    }, 
    views: [{ 
    type: String 
    }] 
}); 

「排序依據」讓我確定我在其中擔任影片的順序

「若干意見」是用戶名列表,那些觀看過視頻的用戶。

我想阻止用戶再次觀看相同的視頻,直到他們觀看了收藏中的所有視頻。因此,我保留觀看過視頻的用戶的姓名。

現在我使用「排序」查詢視頻。

return this.find(videoQuery) 
.skip(offset) 
.limit(count || 10) // @todo 10 : param 
.sort({views: {$meta: username}, 'orderBy': -1}) 
.exec(); 

而我得到的錯誤信息:

Can't canonicalize query: BadValue bad sort specification 

你能幫忙嗎?

+0

我相信我只能使用'textScore'作爲$ meta的值,所以對我的用例沒用:查詢中的參數不是我想'textScore'的那些,我只是想要用戶名。 我已經找了幾個小時,但我似乎無法找到mongodb文檔的解決方案。 – user6403833

回答

0

可能是錯誤的,但來自mongo文檔。當您在排序中指定$ meta時,您需要將其包含在projectedFieldName中。

https://docs.mongodb.com/manual/reference/operator/projection/meta/#proj._S_meta

所以它應該看起來像這樣

return this.find(videoQuery, { views: { $meta: 'textScore' } }) .skip(offset) .limit(count || 10) // @todo 10 : param .sort({views: {$meta: textScore}, 'orderBy': -1}) .exec();

修訂 似乎$元只接受 'textScore' 作爲@Pierre提及。

因此,另一個建議是當響應來自數據庫時,使用下劃線或原生js對數據進行排序。這會效率較低,可能需要進行一些調整,但這肯定會起作用。

希望這會有所幫助。

+0

謝謝,你讓我更進一步。我得到了一個新的錯誤:無法canonicalize查詢:BadValue不支持$ meta操作符:'用戶名' 我相信我只能使用'textScore'作爲$ meta的值,所以它對我的用例無用:查詢不是我想'textScore'的,我只是想要用戶名。 我已經找了幾個小時,但我似乎無法找到mongodb文檔的解決方案。 – user6403833

+0

那麼,如果是這樣的情況比它的不好,$ meta操作符需要更多的功能((((。 –

+0

Btw ..也許你從數據庫響應來排序它們..用JS我認爲這將是非常容易的,使用下劃線。 。或原生js。 –