我们说我有一个名为" points"的猫鼬模型。我用列名" points"来命令它。并通过将我的用户标识传递给文档列名称userid来查找我的文档。
我怎样才能找到某些信息,比如"有xx人比你好?"
在这种情况下,有多少文件比你高?
需要多少次搜索"循环"直到你的文件匹配到那里?
答案 0 :(得分:6)
查询用户的分数,然后查询分数高于该分数的用户数。
Points.findOne({userId: userId}, (err, doc) => {
Points.count({points: {$gt: doc.points}}, (err, count) => {
// do something with count...
});
});
要获得可扩展的效果,您需要单独编制索引userId
和points
。在您的架构中:
userId: {type: ObjectId, index: true},
points: {type: Number, index: true},
...
这应该比任何map-reduce解决方案都快。
答案 1 :(得分:2)
此问题已在另一个答案中解决 https://stackoverflow.com/a/22902445/6386175
您可以将mapReduce
用于小型数据集或更好,维护单独的有序集合。
如果你想使用mongoose,Model对象也有Model.mapReduce
方法,语法相同。