使用mongoose从多个集合中获取数据

时间:2018-03-15 17:44:33

标签: mongoose mongoose-populate

我想从3个集合和

的模式中获取数据

帖子:

var PostsSchema = new mongoose.Schema({
  user_id: String,
  categories_id: Object,
  text: String,  
  date: String,
  updated_at: { type: Date, default: Date.now },
  comments:[{ type: Schema.Types.ObjectId, ref: 'comments' }]
});

评论架构

var CommentsSchema = new mongoose.Schema({
  comment_id: String,
  post_id: String,
  user_id: String,
  comment_text: String,
  updated_at: { type: Date, default: Date.now },
});

用户架构

var UserSchema = new mongoose.Schema({
  user_id:String,
  user_name: String,
  first_name: String,
  last_name: String,
  email: String,
  role_type: String,
  profile_image: String,
  created_at: { type: Date, default: Date.now },
});

我想要与帖子相关的所有帖子,评论。还有与评论相关的用户详细信息。

PostsController.GetListData = function(req, res) {
  posts.find().populate('comments').exec(function (err, Post) { 
    if (err) {
        console.log(err)
    }
    res.write(JSON.stringify(post),null,4);
    res.end();
  });
};

使用此功能,我可以获取帖子和评论数据。 如何获取与评论相关的用户详细信息?

1 个答案:

答案 0 :(得分:0)

如果在您的userSchema中,您有

mongoose.model(userSchema, 'user')

然后你可以这样做     posts.find().populte({ path: 'comments', populate: { 'user' } })

在commentSchema和postSchema中,您应该将user_id更改为

user: { type: Schema.Types.ObjectId, ref: 'user' }

如果你卡住了,让我们阅读这份文件http://mongoosejs.com/docs/populate.html。你可以看看我的GitHub。我做的与你在这里做的相似https://github.com/dnp1204/play-with-mongodb。你去了我进行查询的测试目录。希望它有所帮助