使用mongoose中的mongodb多键索引方法对引用数组进行索引

3
我的模式包含一个ObjectId数组,这些ObjectId是另一个模式的引用。我想使用mongodb的多键索引方法来索引这个数组条目。这样,给定ProductCat集合中某个文档的ObjectId,我就可以列出当前集合中所有具有_pro_cat字段中给定ObjectId的文档。
我对如何在mongoose模式声明中精确声明该字段感到困惑。以下是我的尝试:
_pro_cat: { type: [mongoose.Schema.Types.ObjectId], ref: 'ProductCat', index: true }

_pro_cat: [{ type: mongoose.Schema.Types.ObjectId, ref: 'ProductCat', index: true }]

这个集合的名称是"卖家"。我在模式中使用引用来建立关系,实际字段值是一个数组,每个元素都是类型为ObjectId的对象ID,它将是另一个集合(在这种情况下是ProductCat)的文档的对象ID。如果我对这个字段即"_pro_cat"建立索引,那么给定ProductCat集合中的一个文档的ObjectId,我就能够找到所有在Seller集合中具有该ObjectId的数组字段"_pro_cat"的文档。
我认为我可能需要调用一个单独的索引函数。但我认为这是一个字段级别的索引,所以可能不需要。
我怀疑后者只适用于子文档,而不适用于引用。如果有人能够解答这个问题,我会非常感激。谢谢。
附加问题: [已解决] 在mongodb文档中,它说多键索引是自动的。multikey indexing。这是否意味着如果使用上述方法对字段进行索引,那么mongo将识别该字段是一个数组并使用多键索引。还是说所有的数组字段都将被索引,而不需要明确告诉它要索引哪些字段。
太感谢了。

{{链接1:相关}}


你的意思是,因为你对多值字段进行了索引,所以你期望两个集合之间存在服务器端关系吗? - Sammaye
@Sammaye 这个集合的名称是 Seller。我正在使用模式中的引用建立关系,实际字段值是一个数组,每个元素都是 ObjectId 类型,这些 ObjectId 是另一个集合(在本例中为 ProductCat)中文档的 ObjectId。如果我对该字段进行索引,即 _pro_cat,那么给定 ProductCat 集合中文档的 ObjectId,我将能够找到所有在其数组字段 _pro_cat 中具有给定 ObjectId 的 Seller 集合中的文档。 - vinit
我正在寻找正确的语法来声明此索引在模式中发生,或在定义模式后进行正确的函数调用。我已经更新了问题以提供更多细节,请再次检查。 - vinit
1个回答

5

多键索引意味着,如果您告诉Mongo索引字段,则数组字段中的每个项目都将被索引。

并不意味着所有数组字段都会自动索引,而无需显式告诉Mongo索引该字段。请注意保留HTML标记。


感谢@heinob的澄清。很抱歉我没有清楚表达我的主要问题,请查看更新后的问题以及对Sammaye的回复评论。谢谢。 - vinit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接