我有一個集合,關係到其他收藏品,我想選擇的記錄了用戶最相關的選擇如下:有this.some_collection_id ==「someid」mongodb排序/查詢計算值聚合框架?
首先記錄& & this.another_collection_id = =「another_id」 然後有this.some_collection_id ==「someid」 然後有this.another_collection_id ==「another_id」 那麼其他記錄
例如記錄記載:比方說,主要收集故事,每個故事都有一個'interest_group'和一個位置'。所有用戶都有「主要興趣小組」和「地點」。我想查詢一個特定用戶的前100個最有趣的故事,同一個興趣組的故事&位置應該權衡5,同一個利益組只有3, d喜歡在查詢過程中授予這些點數,以便我可以根據這些點對故事集合進行排序並返回前100名。
因此,我可以做4個單獨的查詢併合並結果客戶端(不太漂亮)或我可以嘗試按照正確的順序獲取集合。
到目前爲止,我想出了以下內容:
map = %Q{
function() {
var score = 1;
if (this.some_id == "#{some_id}") {
score = score + 3
}
if (this.another_id == "#{another_id}") {
score = score + 2
}
emit(this._id, { _id: this._id, score: score });
}
}
reduce = %Q{
function(key, values) {
return values;
}
}
MyCollection.map_reduce(map, reduce).out(inline: true)
這將正確地連接得分返回記錄整個集合,但是我不能排序的得分,所以我將不得不這樣做客戶端方(也醜,因爲我只需要前100記錄左右)
有沒有辦法做到這一點不同?我也檢查了聚合框架,但我沒看到這將如何解決這個特定的查詢。
那麼這個問題有點大,這是沒有人觸及它的最大原因。你至少可以編輯來顯示一些示例文檔(只有幾個),以及應該與預期結果匹配的內容。這將有助於非常瞭解。 –
謝謝,讓我試着添加一些相關的數據 – ahmeij
請做。我想我有你的要求,但我想確定。 –