【问题标题】:Is populate implicit and how many levels deep can it go?填充是隐式的,它可以深入多少层?
【发布时间】:2016-11-26 00:01:54
【问题描述】:

我的任务是使用 mongoose 修改现有(大型)node.js 网站。

架构有一个Question,它链接到Answer 的数组,如下所示:

var QuestionSchema = mongoose.Schema({
   text: { type: String },
   ...
   answers: [{type: mongoose.Schema.Types.ObjectId, ref: 'Answer'}],
   ...
});

var AnswerSchema = mongoose.Schema({
   text: { type: String },
   ....
   question: {
      type: mongoose.Schema.ObjectId,
      ref: Question
   },
...
});     
var Question  = mongoose.model('Story', QuestionSchema);
var Answer = mongoose.model('Answer', AnswerSchema);

我找不到代码中正在使用的populate 方法的任何实例,但是对Question 文档的查询总是返回完整的answer 对象数组,而不仅仅是对象ID。这正是我们所需要的。

我现在必须将reaction 对象数组添加到answer。我使用了以下内容:

var Answer = mongoose.model('Answer', AnswerSchema);
var ReactionSchema = mongoose.Schema({
    text: { type: String },
    .... 
    answer: {
        type: mongoose.Schema.ObjectId,
        ref: Answer,
       //required: true
    },
    ...
});

然后我将以下内容添加到 Answer 架构中:

reactions: [{type: mongoose.Schema.Types.ObjectId, ref: 'Reaction'}]
//where var Reaction  = mongoose.model('Reaction', ReactionSchema);

我可以保存reaction 对象,当我检查answer 的数据库内容时,reaction 对象的类型和形式与question 中的answer 对象相同。

但是,当返回 question 文档时,answer.reaction 的每个元素仅包含 reaction 的对象 ID,而不是完整的 reaction 对象。我遗漏了什么或如何根据ref 类型进行查询以执行连接?

mongodb版本是3.2.9,mongoose是4.0.4。

【问题讨论】:

    标签: mongodb mongoose mongoose-schema mongoose-populate


    【解决方案1】:

    如何查询问题?这是您可以解决嵌套引用的方法:

    Question.findById(id).populate({
      path: 'answer',
      model: 'Answer',
      populate: {
        path: 'reaction',
        model: 'Reaction'
      }
    }).exec(function(err, data){});
    

    这里是 mongoose 文档的链接:Mongoose Docs Deep Populate

    【讨论】:

    • 谢谢。你的回答给了我解决问题的线索。我的 mongo 版本根本没有填充方法。我花了更多时间挖掘现有代码,最终找到了从存储在question.answers 中的对象id 中手动检索answer 对象的代码,然后将它们添加到返回的问题文档中。
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 2014-12-19
    • 1970-01-01
    • 2014-08-24
    • 2021-12-13
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多