MongoDB:map-reduce的排序,但不完全

时间:2016-03-28 14:44:17

标签: javascript node.js mongodb mapreduce

我有一个node / mongo Web应用程序。在mongo数据库中,我有一个(非常大 - 数以百万计)文档集合,称为"故事"。每个故事都有一些基本属性("标题","作者","文字"等)。我试验了一些机器学习算法,试图将文本分类为不同的情绪"。

每个不同的分类器算法都在"算法"中有记录。集合,由名称和"得分"组成,表示算法的执行成功程度。

我将所有分类结果存储在名为" detectedMoods&#34 ;;每条记录都包含storyID,algorithmID和检测到的情绪列表。

在这里,我们终于得到了我的问题:

我想在故事文档中保留每个故事的检测情绪列表,其中故事文档中的列表是由当前具有最高"分数"的算法生成的列表。并不能保证每个故事都会运行每个算法,并且总是可以添加一个具有更高分数的新算法,或者更改分数......但这不会经常发生(也许每隔几天一次)。所以它需要像这样工作:

对于每个故事,在我们为此故事的storyID检测到的一条记录的算法中,找到分数最高的那个,然后将该算法检测到的情绪列表存储在&#34中; detectedMoods"故事的属性以及使用的算法的algorithmID。

感觉Map-Reduce的某些变化在这里有意义,但我无法弄清楚如何将它完全融入该模型......有什么想法吗?我是否需要编写脚本,或者在单个Mongo命令中是否可行?

==根据请求更新==

评论者要求提供示例文档,所以这里就是。

故事集合:

{
    "_id":"c01",
    "Name":"algorithm A",
    "Score":104
}
{
    "_id":"c02",
    "Name":"algorithm B",
    "Score":22
}

算法集合:

{
    "_id":"fh3fha",
    "algorithmID":"c01",
    "storyID":"s01",
    "moods":["desperate","afraid","bitter"]
}
{
    "_id":"m12y49",
    "algorithmID":"c02",
    "storyID":"s01",
    "moods":["bored","unhappy"]
}
{
    "_id":"fj37ah",
    "algorithmID":"c02",
    "storyID":"s02",
    "moods":["confused"]
}

DetectedMoods 集合:

{
    <...Misery...>
    "moods":["desperate","afraid","bitter"],
    "algorithm":"c01"
}
{
    <...Catch-22...>
    "moods":["confused"],
    "algorithm":"c02"
}
来自伪map-reduce的

故事集合更新:

{{1}}

因此,两种算法(c01和c02)都用于处理&#34; Misery&#34;,并且由于c01的得分高于c02,其结果是存储在该故事的Story文档中的结果,以及显示c01的属性是这些情绪的来源。然而,&#34; Catch-22&#34;仅使用c02进行处理,因此它是我们对该故事的最佳选择,因此该故事的情绪列表是存储在故事文档中的情绪列表。

希望澄清事情。

0 个答案:

没有答案