如果 MongoDB 集合中需要多个文本索引,我该怎么办?

如何解决如果 MongoDB 集合中需要多个文本索引,我该怎么办?

我在 MongoDB 中名为 Messages 的集合有很多带有消息内容和元数据的消息。每条消息都有一个 SenderRecipient id,格式为 UUID,后者又是一个 string。在某些用例中,我需要使用相同的 Sender 查询 RecipientUUID,或者仅使用 Sender 或仅使用 Recipient 查询 UUID },或两者都具有不同的 UUID

我为第一种情况创建了一个文本索引,效果很好,但在其他情况下我也需要高效搜索。你有什么建议?我应该调整/改变什么?我无法在同一个集合中定义任何其他文本索引,因为目前 MongoDB 中的文本索引数量存在限制。

注意:我首先不知道文本索引并尝试创建常规索引,但查询根本不使用它们,即使我强制使用它们,查询仍然扫描所有无用的文档。

解决方法

根据 Playground,您需要使用 this 创建索引。

这就是它没有使用索引的原因。

db.Message.createIndex({
  "Sender._id": 1
})

您也可以在 Recipient._id 上拥有另一个索引。根据您的查询,它将使用索引。

我的意思是当您有两个单独的索引时,即一个在 Sender_id 上,另一个在 Recipient._id 上,并且当您查询时,将使用各自的索引。

你的用例不是全文搜索,所以不要为此使用文本索引。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?