我有一个条目集合和一个域集合,如下所示
输入:
{
{
entry_id:1,
title:"Title 1",
domain_id:1
},
{
entry_id:2,
title:"Title 2",
domain_id:1
},
{
entry_id:3,
title:"Title 3",
domain_id:2
}
}
域:
{
{
domain_id:1,
domain:"Google",
rank:1
},
{
domain_id:2,
domain:"Yahoo",
rank:2
}
}
我希望将所有信息收集在一起,并按域名的排名进行排序。来自MySQL背景我通常会加入domain_id上的条目和域,并按等级字段排序。我的一位同事建议调查map / reduce,但在做了一些阅读之后,我不确定如何在这里应用。
答案 0 :(得分:3)
正如你的同事所说,Map/Reduce。
MongoDB是一个基于文档的数据库。您的方案中可能需要遵循的更好的模式是将条目放入域中,看看它有多少干:
{
{
domain_id:1,
domain:"Google",
rank:1,
entries: [
{
_id: dsfdsailfub3i4b23i4b234234,
title: "the title"
},
{
_id: dsfdsailfub3i4b23i4b234234,
title: "the title"
}
]
},
{
domain_id:2,
domain:"Yahoo",
rank:2
}
}
这很容易。您现在可以轻松查询某个域。现在,如果您想知道每个域有多少条目,map
每个条目都返回1,而reduce
所有这些条目都要找出它们的总和。
以下是what exactly is Map/Reduce的几个很棒的答案。一旦你了解了这个想法,就很容易在Mongo中实现它。