如何在mongodb上获取少量数据而不是完整数据

时间:2017-12-11 07:41:00

标签: mongodb

假设我有一个100000的集合条目。 那么每次只获取50个数据而不是100000个数据的方法是什么,因为调用整个数据集是愚蠢的。 我的数据集就是这种类型:

{
    "_id" : ObjectId("5a2e282417d0b91708fa83b5"),
    "post" : "Hello world",
    "createdate" : ISODate("2017-12-11T06:39:32.035Z"),
    "__v" : 0
}

像我必须附加在查询上的技术是什么?

//What filter I have to add.?
db.collection.find({}).sort({'createdate': 1}).exec(function(err, data){ 
    console.log(data); 
});

3 个答案:

答案 0 :(得分:1)

db.collection.find({}).sort({'createdate': 1}).skip(0).limit(50).exec(function(err, data){ 
    console.log(data); 
});

还有两种方法可以使用分页 一个是mongoose-paginate npm模块链接: - https://www.npmjs.com/package/mongoose-paginate

seconnd是带有$ skip和$ limit选项的聚合管道 例如:

//from 1 to 50 records
db.col.aggregate[{$match:{}},{$sort:{_id:-1}},{$skip:0},{$limit:50}];
//form 51 to 100 records
db.col.aggregate[{$match:{}},{$sort:{_id:-1}},{$skip:50},{$limit:50}];

答案 1 :(得分:0)

在find中使用限制

db.collection.find().limit(3)

使用限制与汇总,

db.collection.aggregate({$limit : 2})

如果我们需要将管道排除在外,通常使用聚合,例如我们需要将limitsort放在一起,然后

// sorting happens only on the pipelined out put from limit.
db.collection.aggregate([{$limit : 50},{"$sort": {_id: -1}}]);

// . operator - sorting happening on entire values even though it comes last. 
db.collection.find().limit(50).sort({_id:-1});

添加skip以获得偏移量

db.collection.aggregate([{$limit : 50},{ $skip : 50 },{"$sort": {_id: -1}}]);

db.collection.find().skip(50).limit(50).sort({_id:-1});

答案 2 :(得分:0)

首先,我们必须对数据进行排序,然后限制并跳过功能。

db.collection.aggregate([{"$sort": {f2: -1}, {$limit : 2}, { $skip : 5 }}]);