在MongoDB中使用带有Mongoose的ObjectId

时间:2015-05-08 14:09:12

标签: angularjs mongodb

我最近开始将MongoDB与Mongoose一起使用,看起来似乎是一个简单的问题。 到目前为止我有两个模型,一个用户和一个帖子。帖子由用户拥有,由ObjectId引用。 以下是模型:

发表

var mongoose = require('mongoose');

var PostSchema = new mongoose.Schema({

  text: String,
  stars: { type: Number, default: 0 },
  score: { type: Number, default: 0 },
  user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', default: '554cb70669234d6f04f425a2' }
});

PostSchema.methods.addstar = function(cb) {
  this.stars += 1;
  this.save(cb);
};

mongoose.model('Post', PostSchema);

用户

var mongoose = require('mongoose');
var crypto = require('crypto');
var jwt = require('jsonwebtoken');

var UserSchema = new mongoose.Schema({
  username: {type: String, lowercase: true, unique: true},
  hash: String,
  salt: String
});

mongoose.model('User', UserSchema);

当我想使用带有角度的HTML页面上的数据时,我试图通过使用以下方式访问用户名:

{{ post.user.username }}

然而,这并没有产生任何结果。 我是否需要使用userid发出单独的get请求,或者是更直观的方式?

如前所述,我理解这个问题可能看起来很基本。我刚学习Mongo,之前曾在Rails数据库中工作,很多功能都被模糊了。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

也许答案就在这里: Referencing another schema in Mongoose

要点:

进行查询时,可以填充以下参考:

Post.findOne({_id: 123})
.populate('user')
.exec(function(err, post) {
    // do stuff with post
});

因此,在执行查找之前,请告诉mongo填充用户。

答案 1 :(得分:1)

以下代码返回为每个帖子填充的所有帖子。我忘了在Post.find()的方法调用中包含空对象。

router.get('/posts', function (req, res, next) {
  Post.find({})
  .populate('user')
  .exec(function (err, posts) {
    if(err){ return(err); }
    res.json(posts);
  });
});