问题标签 [mongodb-indexes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mongodb - MongoDB 甚至不使用最简单的索引
请看下面的例子。在我看来,查询应该被索引覆盖{a: 1}
,但是explain()
给了我一个indexOnly: false
. 我做错了什么?
mongodb - 多个字段的 MongoDB 索引
我已经阅读了 MongoDB in action book 中关于索引的章节,并且想知道是否有人可以扩展它所讨论的关于索引的内容。
如果我有一个涵盖的索引a,b,c,d,e
并且我使用该索引进行查询a,b,c
。如果我查询会发生什么a,c,e
?索引是仅用于查询a
还是在查询其他字段时使用?
在这种情况下,将索引也放在a,c,e
. 我问是因为我有一个前端部分链接到这些字段,用户可以在其中创建自由形式的查询(a,b,c,f
可能是一个)。我是否需要所有可能出现的选项的索引?
mongodb - Mongodb 后台索引 - 一旦创建它们仍然是后台吗?
在 mongodb 中创建索引时,可以指定background: true
flag,使索引创建是非阻塞的。这在生产中非常有用,因为您不希望在创建以前显然不需要的索引时锁定整个数据库(因为您没有它)。
阅读文档,似乎这个标志只决定了索引的创建方式,一旦完成,索引的行为就与普通索引完全一样。这就是我想要的——我不希望索引与文档不同步,因为它正在后台更新,尽管我可以想象一个数据库可以做到这一点。
我在这里问是因为该getIndexes
命令显示索引background
即使在创建后仍被标记为。这只是一个关于它是如何创建的提醒吗?还是background
索引在创建后表现不同?也许复制有一些微妙之处?
mongodb - 多键索引上的慢范围查询
我有一个post
以3500 万个对象命名的 MongoDB 集合。该集合有两个二级索引,定义如下。
我希望下面的查询(它只是按namespace
and过滤post_time
)在合理的时间内运行而不扫描所有对象。
然而,MongoDB 至少需要十分钟才能检索结果,而且奇怪的是,它设法扫描了7000 万个对象以根据explain
函数完成这项工作。
对象数和扫描数的差异一定是标签数组的长度(都等于2)造成的。不过,我不明白为什么post_time
过滤器不使用索引。
你能告诉我我可能会错过什么吗?
(我正在使用 24 核和 96 GB RAM 的下降机器。我使用的是 MongoDB 2.2.3。)
mongodb - 如果每个属性都在 mongodb 集合中编入索引,我是否需要复合索引?
假设我在 mongo 数据库中有一个包含以下文档的集合
该集合有很多对象(一百万左右),我的应用程序除了定期向该集合添加对象外,还对这些数据进行了几种不同类型的查找。
一种方法使用所有三个属性(姓名、电子邮件和电话)进行查找,因此我可以为这三个字段创建一个复合索引,以确保此查找有效。
现在,我的应用程序中还有一些方法可以获取所有具有相同名称的对象(我知道这是个坏例子)。所以我需要一个名称字段的索引。
渐渐地,我的应用程序增长到必须索引其他字段的地步。
现在,我的问题。如果我将每个属性单独编入索引,那么为所有三个属性(或两个属性)维护复合索引是否仍然有意义?
显然,这是一个不好的例子......如果我正在制作一个集合来存储一个人的多个联系信息,我会使用数组。但是,这个问题纯粹是关于索引的。
mongodb - 在 Java 中索引 MongoDB 集合
我正在MongoDB
以下列方式创建一个集合,我想从代码中创建一个2dsphere
关于该集合的位置字段的索引。Java
但我不能这样做。
collection.ensureIndex()
方法需要 aDBObject
作为参数,但我无法将位置传递给它。
如何collection.ensureIndex({"location" : "2dsphere"})
在Java
代码中创建?
MongoDB
允许我在命令提示符下这样做。但是,我想通过用 Java 编写的代码来索引它。
mongodb - 向集合中添加新项目后,为什么我的 MongoDB 查询变慢了?
对此的任何帮助将不胜感激。
我有一个大型的 Mongodb 集合,我在其中存储用户活动。它有几个用于我想要运行的查询的复合索引,通常查询性能非常好,并且用户活动流会立即加载。
但是,最近我添加了一个后台任务,它每 2 小时向集合中添加 20k 条记录(每个用户一条新记录)。由于添加了此任务 - 我注意到在添加这些记录后我第一次访问我的活动流时,在页面加载之前有很大的延迟。然后当我刷新页面时,它会快速加载。
似乎新项目只是在我尝试访问它们后才被添加到索引中。但是从我在 MongoDB FAQ 上读到的内容 - 它们会自动添加到索引中 - http://docs.mongodb.org/manual/faq/indexes/#should-you-run-ensureindex-after-every-insert。也许这是他们还没有被添加的情况?
如果有帮助,这是我的收藏统计信息。
mongodb - MongoDB索引多输入搜索
我有一个看起来像这样的搜索功能:
此搜索的条件作为条件对象传递给MongoDB
'方法,例如:find()
我只是在学习indexes
,MongoDB
所以请多多包涵。我知道我可以在每个单独的字段上创建一个索引,我也可以在几个字段上创建一个多索引。例如,对于一个索引,我可以这样做:
如果有人搜索,例如,一个类别,而不是设计师或商店,就会出现明显的问题,它不会被索引。
我目前正在使用$and
运算符查找这些术语,所以我的问题是:
如何创建一个索引以允许这种类型的灵活搜索?我是否必须为这 6 个术语的每个可能组合创建一个索引?或者,如果我$and
在搜索中使用它是否足以索引每个单独的术语并且我将获得最佳性能?
mongodb - mongoDB 中的 _id_hashed 索引是什么?
我通过散列 _id 对我的 mongoDB 集群进行了分片。我检查了索引大小,有一个 _id_hashed 索引占用了很多空间:
mongoDB 手册说,如果您对集合进行分片,则会在分片键上创建一个索引。我想这就是 _id_hashed 索引存在的原因。
我的问题是:如果我只通过 _id 字段查询文档,那么 _id_hashed 索引是什么?我可以删除它吗?因为它占用太多空间。
ps:似乎mongoDB在查询时使用_id索引,而不是_id_hashed索引。查询的执行计划: