MongoDB / Mongoose在您之前查找结果数

时间:2016-09-21 21:39:41

标签: javascript mongodb mongoose

我们说我有一个名为" points"的猫鼬模型。我用列名" points"来命令它。并通过将我的用户标识传递给文档列名称userid来查找我的文档。

我怎样才能找到某些信息,比如"有xx人比你好?"

在这种情况下,有多少文件比你高?

需要多少次搜索"循环"直到你的文件匹配到那里?

2 个答案:

答案 0 :(得分:6)

查询用户的分数,然后查询分数高于该分数的用户数。

Points.findOne({userId: userId}, (err, doc) => {
    Points.count({points: {$gt: doc.points}}, (err, count) => {
        // do something with count...
    });
});

要获得可扩展的效果,您需要单独编制索引userIdpoints。在您的架构中:

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方法,语法相同。