我有一个复杂的Mongoose人口问题,我试图解决这个问题,并想知道是否有人可以解决问题(是的,我知道,可以使用RDBMS,但大多数其他位架构非常适合Mongo)。
我有两个模型:Study
和Participant
。
研究:
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链接到研究中的项目。 (这些是引用的,不是批发复制的,因此对研究检查表的文本更改会自然地传播下来)
我想在检索参与者时填充此模型。当我得到它们时,我希望在item
上checklist_items
填充研究中的相应项目。希望这是有道理的。
我尝试过这样的事情:
Participant.findById(req.params.id)
.populate({path: 'checklist_items.item', populate: {model: 'Study', path: 'checklist'})
.exec()
但没有骰子。我已经唠叨了一段时间,而且我不确定我是如何做这个孩子对孩子的人群。
有什么想法吗?这可能吗?
编辑:使用正确的条款澄清标题
答案 0 :(得分:0)
你可以试试这个:
Participant.findById(req.params.id)
.populate({path: 'checklist_items.item', model: 'Study'})
.exec()
这将在participant
内为populate
和item
提取所需的checklist_items
。
看看它是否适合你。
答案 1 :(得分:0)
看来这对Mongoose来说是不可能的,并且代表了一些反模式。对于将来有这个问题的人提出这个问题的引用:https://github.com/Automattic/mongoose/issues/2772