【问题标题】:Using ObjectId with Mongoose in MongoDB在 MongoDB 中将 ObjectId 与 Mongoose 一起使用
【发布时间】:2015-07-19 11:47:47
【问题描述】:

我最近开始将 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 }}

但是这并没有产生任何结果。 我是否需要使用用户 ID 发出单独的获取请求,还是他们更直观的方式?

如前所述,我理解这个问题可能看起来很基本。我刚刚学习 Mongo,之前使用过 Rails 数据库,其中很多功能都被掩盖了。

有什么想法吗?

【问题讨论】:

    标签: angularjs mongodb


    【解决方案1】:

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

    总结:

    当您进行查询时,您可以像这样填充引用:

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

    所以在执行查找之前,您告诉 mongo 填充用户。

    【讨论】:

    • 谢谢@tuvokki。这适用于一篇文章。在我最初的获取请求中,我收到了所有帖子,并希望填充每个用户名。此代码不起作用:Post.find() .populate('user', 'username') .exec(function (err, posts) { if(err){ return(err); } res.json(posts); });
    【解决方案2】:

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

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

    【讨论】:

    • 太棒了!确实,我的回答针对的是 findOne 方法,但对于其他发现也是如此。
    猜你喜欢
    • 2021-01-02
    • 2022-12-04
    • 2015-03-13
    • 2018-01-13
    • 1970-01-01
    • 2013-02-06
    • 2021-07-13
    • 2021-04-01
    • 2019-04-15
    相关资源
    最近更新 更多