有没有办法在mongoDB中索引文档来填充其引用?

时间:2015-12-30 11:33:13

标签: mongodb mongoose

如果我有这两个系列:

Book: {
title: String,
description: String
author: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
}

User: {
_id: (generated by mongo)
username: String
}

我想为Book for FTS编制索引。 我是否可以通过用户名搜索它,即使用户名没有明确存储在图书集中,也可以搜索?

换句话说,是否可以(或建议)索引填充的集合?

由于

1 个答案:

答案 0 :(得分:1)

正如Blakes Seven所提到的,不可能跨集合进行索引。

如果这种全文搜索对我的应用程序至关重要,那么经典的解决方案是对字段进行非规范化并将其包含在两个集合中。在这种情况下,您的Book集合将如下所示:

Book: {
  title: String,
  description: String
  author: {
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'User',
    ### New field ###
    username: String
  },
}

现在您可以在author.username上进行索引。

这完全取决于您的应用程序是否是一个好主意。缺点包括跨集合同步username并为每个文档添加不必要的权重。