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

Mic*_*ich 7 mongoose mongodb

如果我有这两个集合:

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

User: {
_id: (generated by mongo)
username: String
}
Run Code Online (Sandbox Code Playgroud)

我想索引Book for FTS.我是否可以通过用户名搜索它,即使用户名未明确存储在书籍集合中也可以搜索?

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

谢谢

tyl*_*eha 1

正如布莱克七号提到的,不可能跨集合建立索引。

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

Book: {
  title: String,
  description: String
  author: {
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'User',
    ### New field ###
    username: String
  },
}
Run Code Online (Sandbox Code Playgroud)

现在您可以索引author.username.

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