首先这是我第一次来蒙哥...
概念:
- 用户能够用自然语言描述图像。
- 划分用户输入并将他描述的单词存储在一个名为 words 的 Collection 中。
- 用户必须能够浏览最常用的词并将这些词添加到他们的描述中。
- 系统将使用最常用的词(对于所有用户)并使用这些词来描述图像。
我的word文档(目前)如下(示例)
{
"date": "date it was inserted"
"reported": 0,
"image_id": "image id"
"image_name": "image name"
"user": "user _id"
"word": "awesome"
}
单词将被复制,以便每个单词都可以与用户相关联...
问题:我需要执行一个 Mongo 查询来让我知道不是由给定用户创建的最常用的词(用于描述图像)。(满足以上第 3 点)
我已经看过 MapReduce 算法,但从我读到的内容来看,它有几个问题:
- 无法对结果进行排序(我可以从最常用到最不常用的顺序)
- 在数百万个文档中,它可能需要很长的处理时间。
- 无法限制返回结果的数量
我考虑过每天在给定时间运行一项任务,以将给定用户未用于描述给定图像的单词排名存储在文档(在不同的集合中)列表中。我必须将其限制为 300 个结果或其他内容(关于适当限制的任何想法??)类似:
{
user_id: "the user id"
[
{word: test, count: 1000},
{word: test2, count: 980},
{word: etc, count: 300}
]
}
我在这个解决方案中看到的问题是:
- 结果会有相当大的延迟,这是不可取的。
- 为所有用户生成此文档时的服务器负载可能会激增(实际上我在 Mongo 中对此知之甚少,所以这只是一个假设)
也许我的方法没有任何意义......也许我在 Mongo 中缺乏经验将我指向错误的“模式设计”。
知道什么可能是解决此类问题的好方法吗?
很抱歉这篇大文章,感谢您的时间和帮助!
若昂