mongoose或mongodb支持对sub-document进行分页获取数据吗?
发布于 11 年前 作者 jbasttdi 5508 次浏览 最后一次编辑是 8 年前

示例document的数据结构及示例数据如下: <code>

var ReplyMessagesSchema=new Schema({ rcode:String, rname:String });

var TMessagesSchema=new Schema({ parentmsg:String, replymsg:[ReplyMessageSchema] });

mongoose.model(‘TMessages’,TMessagesSchema); mongoose.model(‘ReplyMessages’,ReplyMessagesSchema);

示例数据:

{ "_id" : ObjectId(“52e23036b7ceecc00f8158f6”), “parentmsg” : “父类的字段”, “replymsg” : [{ "_id" : ObjectId(“52e5c81067861810067a6e98”), “rcode” : “子类代码1”, “rname” : “子类名字1”, }, { "_id" : ObjectId(“52e5c85167861810067a6e99”), “rcode” : “子类代码2”, “rname” : “子类名字2”, }, { "_id" : ObjectId(“52e5cb060e0dad981eedc74d”), “rcode” : “子类代码3”, “rname” : “子类名字3”, }, { "_id" : ObjectId(“52e5cd590e0dad981eedc74e”), “rcode” : “子类代码4”, “rname” : “子类名字4”, }, { "_id" : ObjectId(“52e5cd590e0dad981eedc74f”), “rcode” : “子类代码5”, “rname” : “子类名字5”, }, { "_id" : ObjectId(“52e5cf406fdb99d8159455f3”), “rcode” : “子类代码6”, “rname” : “子类名字6”, }], } </code>

下面的调用的方法会把所有的replymsg都取出来,我现在只想取部分的replymsg数据,想实现分页取数据的效果,请问如果实现? exports.getmessages = function (messageid, page, callback) { var query={_id:messageid}; // var options = { skip: (page - 1) * 3, limit: 3}; // TMessages.findOne(query, {}, options, callback);

TMessages.findOne(query, {}, {}, callback); };

</code>

1 回复

我查了一些资料,说可以用map-reduce来解决,但感觉map-reduce用在生产环境效率不高,最后就通过全部取出来再用js的数组函数来操作算了。这样虽然服务器占了点内存,但网络传输数据量就小点。 <code> exports.getmessage = function (messageid, page, callback) { // var query={_id:messageid}; // var options = { skip: (page - 1) * config.pagesize, limit: config.pagesize}; // TMessages.findOne(query, {}, options, callback);

var query={_id:messageid};

// var options = { skip: (page - 1) * config.pagesize, limit: config.pagesize}; TMessages.findOne(query, {}, {}, function(err,data){ if(err){ console.log(‘getmessage err:’+err); } var begin=(page-1)config.pagesize; var end=pageconfig.pagesize; var replymsg=data.replymsg.slice(begin,end); data.replymsg=replymsg; callback(err,data); }); }; </code>

回到顶部