示例document的数据结构及示例数据如下:
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",
}],
}
下面的调用的方法会把所有的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); };
我查了一些资料,说可以用map-reduce来解决,但感觉map-reduce用在生产环境效率不高,最后就通过全部取出来再用js的数组函数来操作算了。这样虽然服务器占了点内存,但网络传输数据量就小点。
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);
});
};