我想按名称从学生集合中提取100条记录。现在我想让这个100条记录中标记大于x的学生。任何人都可以帮助解决这个问题。当我在查询中给出Max(标记)时,它在排序之前执行并跳过。
这是我试过的查询
var query = {};
query["marks"] = {$gt:35};
db.collection("student").find(query).skip(0).limit(100).sort("name")
答案 0 :(得分:15)
当您按照本例中的步骤描述查询时,aggregate
将一个操作的输出的结果转换为下一个输入的输出的能力使其成为自然选择:
db.student.aggregate([
// First sort all the docs by name
{$sort: {name: 1}},
// Take the first 100 of those
{$limit: 100},
// Of those, take only ones where marks > 35
{$match: {marks: {$gt: 35}}}
])
答案 1 :(得分:-3)
您可以通过在光标上应用条件来完成此操作。 因此,首先从数据库中选择行,然后对查询返回的游标应用条件。
db.student.find().limit(100).sort({"name":1}).forEach( function(doc){
if(doc.marks >35) { print(doc.marks); }
});
或
var cursor = db.student.find().limit(100).sort({"name":1});
cursor.forEach(function(doc){ if(doc.marks >35){ print(doc.marks); } } );
以上查询正在做同样的事情。他们将首先从数据库中获取记录,然后打印所有标记大于35的文档的标记。