【问题标题】:Is there a way to index a document in mongoDB populating its references?有没有办法在 mongoDB 中索引一个文档来填充它的引用?
【发布时间】:2016-04-04 09:08:15
【问题描述】:

如果我有这两个集合:

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

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

我想为 FTS 索引 Book。 我是否可以这样做,即使用户名未明确存储在书籍集合中,也可以通过用户名进行搜索?

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

谢谢

【问题讨论】:

  • 那么通过添加 index:true,引用将在集合中被索引?
  • 没有。不可能对来自另一个集合的“用户名”(或任何其他字段)中包含的数据进行任何类型的搜索(FTS 或其他)。这是一个“连接”,这是 MongoDB 不做的事情(不包括聚合 $lookup ),“填充”并不是真正的连接,而只是围绕运行单独的查找查询的便利包装。您只能要求数据库一次只搜索一个集合中的数据。
  • 好的。感谢您的明确答复!

标签: mongodb mongoose


【解决方案1】:

正如布莱克七世所说,不可能跨集合建立索引。

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

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

现在您可以在author.username 上建立索引。

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

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 2016-12-15
    • 2020-11-06
    • 1970-01-01
    • 2020-06-24
    • 2020-09-06
    • 2019-11-07
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多