我有一个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进行处理,因此它是我们对该故事的最佳选择,因此该故事的情绪列表是存储在故事文档中的情绪列表。
希望澄清事情。