当该文档的模型/类型未知时,使用Mongoose是否可以有一个引用另一个对象的字段?
例如,我有模特:照片,评论,提交,帖子等,我希望有一个类似的模型引用它们:
pmi = defaultdict(lambda : defaultdict(int))
for t1 in p_t:
for t2 in com[t1]:
denom = p_t[t1] * p_t[t2]
pmi[t1][t2] = math.log2(p_t_com[t1][t2] / denom)
semantic_orientation = {}
for term, n in p_t.items():
positive_assoc = sum(pmi[term][tx] for tx in positive_vocab)
negative_assoc = sum(pmi[term][tx] for tx in negative_vocab)
semantic_orientation[term] = positive_assoc - negative_assoc
据我所知,var Like = new Mongoose.Schema({
// What would the value of `ref` be, should it just be left out?
target: { type: Schema.Types.ObjectId, ref: '*' }
});
需要成为模特。我可以把它全部放在一起,但我仍然可以通过那种方式获得Mongoose populate method的好处吗?
答案 0 :(得分:1)
您可以采取两种方法。
基于Populating across Databases部分。致电populate
时,您可以指定要使用的型号。
Like.find().populate({
path: 'target',
model: 'Photo'
})
这要求您在填充之前了解所需的模型。
基于Dynamic References部分。
您需要先将target
调整为类似以下内容:
var Like = new Mongoose.Schema({
target: {
kind: String,
item: {
type: Schema.Types.ObjectId,
refPath: 'target.kind'
}
}
});
target.kind
是" ref"的值将用于populate
,而target.item
是ObjectId。我们使用refPath
代替ref
进行动态参考。
然后,当您致电populate
时,您将执行以下操作:
Like.find().populate('target.item')
请注意,我们填充的是'target.item'
而不是'target'
。