我有一个集合,关系到其他收藏品,我想选择的记录了用户最相关的选择如下:有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
请做。我想我有你的要求,但我想确定。 –