【问题标题】:populate with mongoose pagination填充猫鼬分页
【发布时间】:2018-06-15 07:07:46
【问题描述】:

我尝试使用 npm mongoose-paginate 获取数据,但填充不起作用

这是我的UsersSchema.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var usersSchema = new Schema({
    name : String,
    created_at : { type : Date, default : Date.now }
});

module.exports = mongoose.model('users',usersSchema);

这里是帖子架构

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var mongoosePaginate = require('mongoose-paginate');

var postsSchema = new Schema({
    user : { type: Schema.Types.ObjectId, ref: 'users' },
    post : String,
    created_at : { type : Date, default : Date.now }
});
postsSchema.plugin(mongoosePaginate);
module.exports = mongoose.model('posts',postsSchema);

这是我的查询

var options = {
    sort:     { created_at: -1 },
    lean:     true,
    offset:   offset,
    populate : 'users',
    limit:    10
};
postsSchema.paginate({user:user},options,function(err,posts){
    if(err){
        console.log(err)
        return false;
    }
    console.log(posts)
});

用户提供 objectID 而不是用户数据。 即

[{
   user : objectID(987654ff11aa),
   post : 'post'
}]  

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-populate


    【解决方案1】:

    人口有以下事情

    Post.find({})
    .populate([
        // here array is for our memory. 
        // because may need to populate multiple things
        {
            path: 'user',
            select: 'name',
            model:'User',
            options: {
                sort:{ },
                skip: 5,
                limit : 10
            },
            match:{
                // filter result in case of multiple result in populate
                // may not useful in this case
            }
        }
    ])
    .exec((err, results)=>{
       console.log(err, results)
    })
    

    【讨论】:

      【解决方案2】:

      如果你想使用 mongoose-paginate,你可以这样做

      var query = {};
      var options = {
        sort: { date: -1 },
        populate: 'users',
        lean: true,
        offset: offset, 
        limit: 10
      };
      
      Post.paginate({}, options, (err, result) => {
       //....
      })
      

      【讨论】:

      • 如果我想更进一步并通过用户名进行查询,例如名称为 (user.name) 的用户,其中包含 eye 的作品,请问该怎么办
      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 2016-10-10
      • 2019-09-16
      • 2015-07-13
      • 2020-01-17
      • 2021-05-03
      • 2021-01-09
      相关资源
      最近更新 更多