我正在尝试以最便宜的成本和最佳性能实现以下目标:
(请考虑数百万份文件):
我有这个系列:关注
{
“followee”: 12345,
“follower”: 54321,
“start”: ISODate(“2013-08-21T12:34:00”),
“last”: ISODate(“2013-08-23T06:00:00”),
“end”: ISODate(“2013-08-23T07:50:23”)
}
上次是follower
跟随followee
时的最后一次扫描日期
现在在个人资料页面上,我获得了所有关注者(限制为10个),但我还想检查当前用户是否关注了关注者。
天真的解决方案是使用以下标准查询foreach关注者:'follower'=当前用户和'followee'= follower,如果结果为空,则返回false,否则为true。
我的问题是:有更好的解决方案吗?比如MAP REDUCE或其他东西,我是Mongodb的新手,所以也许有人可以帮助我这里 非常感谢
答案 0 :(得分:1)
您可以使用$in
operator,这样您就不必进行十次查询,只需一次,例如
// currentProfile.displayedFollowerIds = [ 32434, 54354, 656536, ... ]
db.followers.find( { followee : currentUser.Id,
follower: {$in : currentProfile.displayedFollowerIds } });
MongoDB中的Map / Reduce不适用于即席查询; Map / Reduce操作在MongoDB中有相当多的开销,不应该像查询一样使用。
如果您有复杂的查询,可能需要查看aggregation framework。