使用Mongoose引用具有未知模型类型的对象

时间:2015-06-28 17:17:27

标签: javascript node.js mongodb mongoose

当该文档的模型/类型未知时,使用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的好处吗?

1 个答案:

答案 0 :(得分:1)

您可以采取两种方法。

1。调用populate

时传入ref的值

基于Populating across Databases部分。致电populate时,您可以指定要使用的型号。

Like.find().populate({
  path: 'target',
  model: 'Photo'   
})

这要求您在填充之前了解所需的模型。

2。将ref的值与目标

一起存储

基于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'