mongodb中前N行的查询

mongodb中前N行的查询,mongodb,Mongodb,我想从一个学生收藏中按名字排序提取100条记录。现在,我只想得到这100条记录中分数大于x的学生。谁能帮忙解决这个问题。当我在查询中给Max(marks)时,它在排序和跳过之前执行 这就是我尝试的问题 var query = {}; query["marks"] = {$gt:35}; db.collection("student").find(query).skip(0).limit(100).sort("name") 可以通过在光标上应用条件来实现这一点。 所以,首先从数据库中选择行,然后

我想从一个学生收藏中按名字排序提取100条记录。现在,我只想得到这100条记录中分数大于x的学生。谁能帮忙解决这个问题。当我在查询中给Max(marks)时,它在排序和跳过之前执行

这就是我尝试的问题

var query = {};
query["marks"] = {$gt:35};
db.collection("student").find(query).skip(0).limit(100).sort("name")

可以通过在光标上应用条件来实现这一点。 所以,首先从数据库中选择行,然后对find查询返回的游标应用条件

   db.student.find().limit(100).sort({"name":1}).forEach( function(doc){ 
                                       if(doc.marks >35) { print(doc.marks); } 
                                                 });


上述这些查询也在做同样的事情。他们将首先从数据库中获取记录,然后打印标记大于35的所有文档的标记。

当您的查询按步骤描述时,如本例所示,
聚合
将结果从一个操作的输出传输到下一个操作的输入,这是一种自然选择:

db.student.aggregate([
//首先按名称对所有文档进行排序
{$sort:{name:1}},
//以前100个为例
{$limit:100},
//其中,只选那些分数>35的
{$match:{marks:{$gt:35}}
])

请发布示例文档和您尝试的查询。这将是一个低效的解决方案,需要将所有文档发送回客户端进行匹配。是否有任何方法可以将查询传递给它,如{“name”:“Kishore”}@Kishore当然,您会为此将
{$match:{name:“Kishore”}
添加到您的管道中。参见文档:为了节省时间,我得到了thanx。事实上,我指定了两个匹配查询,一个在排序之前,一个在最后,它完全符合我的目的。很抱歉,再次干扰,最后一个问题是有没有办法在匹配中指定排序。
    var cursor = db.student.find().limit(100).sort({"name":1});
    cursor.forEach(function(doc){ if(doc.marks >35){ print(doc.marks); } } );