【问题标题】:Proper way to use .populate() mongodb Node.js使用 .populate() mongodb Node.js 的正确方法
【发布时间】:2015-01-08 22:42:12
【问题描述】:

我正在尝试将完整的用户模型附加到我的 cmets 部分的每个评论中。由于 mongodb 没有连接,我一直试图弄清楚如何使用 .populate() 从控制器添加用户对象。据我了解,要使用填充功能,您只需要做两件事。

  1. 在模型中定义一个参考。
  2. 在定义了 ref 的字段名称上调用 .populate()。

我已将模型中的 ref 定义为“用户”模型:

var commentSchema = new mongoose.Schema({
  author: { type: String, ref: 'User' },
  description: String,
  commentID: String,
  hasParent: String,
  parentComment: String,
  timestamp: { type: Number, default: 0 },
});

然后我尝试将用户模型添加到评论对象中的作者字段:

Comment
  .find() 
  .populate('author')
  .exec(function (err, comments) {
    console.log(comments);
  }); 

有没有我遗漏的步骤?我希望在每条评论的作者字段中看到所有带有完整用户对象的 cmets。

【问题讨论】:

  • 您的populate() 似乎不是问题所在。我不知道你的用户模型的结构,但你应该参考用户的_idauthor: {type: Schema.ObjectId, ref:'User'}

标签: javascript node.js mongodb mongoose


【解决方案1】:

请考虑进行以下更改。

author: { type: String, ref: 'User' };
authot: { type: Schema.Types.ObjectId, ref:'User'};

【讨论】:

  • 您的意思是authot?通过添加一些关于它们的工作原理和原因的解释,几乎总是可以改进纯代码的答案。
【解决方案2】:

解决方案是从 mongodb 中删除 cmets 集合。从新开始,它按预期工作。如果有人遇到类似问题,请尝试删除在向模型添加 ref 之前创建的对象集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2016-05-09
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多