Mongoose将子文档填充到子文档

时间:2016-12-22 02:10:31

标签: node.js mongodb mongoose

我有一个复杂的Mongoose人口问题,我试图解决这个问题,并想知道是否有人可以解决问题(是的,我知道,可以使用RDBMS,但大多数其他位架构非常适合Mongo)。

我有两个模型:StudyParticipant

研究:

var StudySchema = new mongoose.Schema({
  name: String,
  checklist: [
    {
      order: Number,
      text: String
    }
  ]
});

参与者:

var ParticipantSchema = new mongoose.Schema({
  name: String,
  checklist_items: [
    {
      isComplete: Boolean,
      item: {
        type: Schema.Types.ObjectId
      }
    }
  ]
});

当创建参与者(他们始终是研究的一部分)时,核对表将被复制到参与者身上,因此我们可以跟踪每个参与者的核对表。我只是将ID推入Participant.checklist_items.item以将这些ID链接到研究中的项目。 (这些是引用的,不是批发复制的,因此对研究检查表的文本更改会自然地传播下来)

我想在检索参与者时填充此模型。当我得到它们时,我希望在itemchecklist_items填充研究中的相应项目。希望这是有道理的。

我尝试过这样的事情:

Participant.findById(req.params.id)                                    
    .populate({path: 'checklist_items.item', populate: {model: 'Study', path: 'checklist'})                                           
    .exec()  

但没有骰子。我已经唠叨了一段时间,而且我不确定我是如何做这个孩子对孩子的人群。

有什么想法吗?这可能吗?

编辑:使用正确的条款澄清标题

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

Participant.findById(req.params.id)                                    
    .populate({path: 'checklist_items.item', model: 'Study'})                                           
    .exec() 

这将在participant内为populateitem提取所需的checklist_items

看看它是否适合你。

答案 1 :(得分:0)

看来这对Mongoose来说是不可能的,并且代表了一些反模式。对于将来有这个问题的人提出这个问题的引用:https://github.com/Automattic/mongoose/issues/2772