问题标签 [compound-index]

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.

0 投票
2 回答
753 浏览

mongodb - Mongodb 复合 2dsphere 索引无法按预期工作

我有一个名为 search2 的集合,其中包含大约 20000 个文档,如下所示:

我用这个命令定义了一个索引:

在集合上只有这个索引和“_id”字段的默认索引。

当我执行以下查询时,我希望“nscannedObjects”为 = 10:

但这是结果:

如果我从查询中删除排序,我会得到:

那么,为什么不使用索引对结果进行排序呢?从这个文档: http://docs.mongodb.org/manual/applications/geospatial-indexes/ http://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/ 我了解 MongoDb 支持“以标量索引字段(即升序或降序)作为 2dsphere 索引字段的前缀或后缀的复合索引”以及“如果排序文档是复合索引的子集并且从索引的开头开始,MongoDB 可以使用检索和排序查询结果的索引。”

我错过了什么?

提前致谢

0 投票
1 回答
280 浏览

mysql - 应该按哪个顺序(表列或查询)组合索引?

我有一个样本表,例如-

现在看看索引eve_hour_index(evedate,hour)和eve_msisdn_index(evedate,msisdn)的顺序。但我最后宣布了evedate。

我在某处读到复合索引中的顺序很重要。那么是哪个顺序呢?查询中的顺序还是表中的顺序?

我是否必须将此复合索引重写为 eve_hour_index(hour,evedate) 和 eve_msisdn_index(msisdn,evedate)?

还是第一个是正确的?

谢谢你。

0 投票
1 回答
1307 浏览

mongodb - 具有地理位置的Mongo复合索引不起作用

我很难处理应该是微不足道的事情......
我有以下个人资料文档结构:

我的应用程序中的一个常见用例是检索按年龄过滤的附近个人资料。

所以我创建了以下复合索引:

而且无论我做什么,我都无法使用创建的索引运行查询(也尝试使用提示),
这是为查询生成的解释:

我正在使用 mongodb 2.4.4 版。

我究竟做错了什么?非常感谢您的回答。

0 投票
1 回答
2822 浏览

indexeddb - IndexedDB IDBKeyRange 复合/多重索引不起作用

谁能解释为什么我的 IDBKeyRange 似乎只在第一列上过滤?

我有一个定义如下的索引:

我的查询大致如下:

我的结果似乎从 tmpName 过滤到 tmpName + "z",但完全忽略了强度、形式和包装大小。

谁能看到我做错了什么?

哦,所有字段都存储为字符串....

干杯,

附加信息:

我使用复合索引创建的另一个表似乎正在工作。这些表之间仅有的两个区别如下:

1)有效的表在索引中只有 2 个属性。2)在工作表中,两个属性都是 3 属性主键的一部分。

我已经通过使用 Chrome 中的“资源”选项卡测试了它是否适用于该表,它允许我通过下限键过滤索引并返回数据。

更多附加信息:

经过更多测试,并切换到 FF 以确保它不是 chrome 但我正在经历我认为我找到了问题。我不相信搜索复合索引会按我预期的方式工作......

IDBKeyRange 实际上是一个范围......看起来当我输入时,例如,

["PARA","500","TAB","32"] ["PARAz","500z","TABz","32z"]

IndexedDB 搜索从 LB 开始的第一个药物,并选择直到最后一个以上限结束的药物的所有内容。

我相信,这就是为什么它设法选择从任何价值开始的优势。它实际上并没有过滤以“500”开头的强度,而是选择药物上“500”的第一个实例到最后一个实例之间的所有内容。

如果我的假设是正确的,那么下面的文章可能有点错误/误导(因为我相信用户想要搜索一个矩形而不是一个范围:

多个属性上的索引数据库游标范围

谁能确认我的发现并告诉我是否有办法在多个值上实际搜索 IndexedDB?在上面文章的底部,有人提到了一个我认为可以工作的相交函数,但是当我在网上搜索时,它似乎不存在......

干杯,

0 投票
2 回答
57 浏览

mongodb - mongodb 查询应该被索引覆盖,但不是

查询:

db.myColl.find({"M.ST": "mostrepresentedvalueinthecollection", "M.TS": new Date(2014,2,1)}).explain()

解释输出:

附加细节:myColl 包含大约 40m 文档,平均对象大小为 300b。

我不明白为什么 indexOnly 没有设置为 true,我在 {"M.ST":1, "M.TS":1} 上有一个复合索引

mongo 主机是一个带有 16gb RAM 和 500gb 磁盘空间(旋转磁盘)的 unix 机器。数据库的总索引大小为 10gb,我们有大约 1k upserts/sec,在这 1K 20 上是插入,其余的是增量。

我们有另一个查询,它在查找查询中添加了第三个字段(称为“MX”),以及“M.ST”、“MX”、“M.TS”上的复合索引。那是闪电般的速度,只扫描 330 个文档。

知道有什么问题吗?

谢谢。

编辑:这是示例文档的结构:

这个想法是按月存储一些分析指标,“D”字段表示包含该月每一天的数据的文档数组。

0 投票
1 回答
1890 浏览

mongodb - Mongodb使用错误的索引

我在一个集合上有多个索引,如下所示。特别是我想要一个查询使用"gTs_1_RE_H_1_l_1",但查询正在使用"gTs_1"

在这里,我有一个单独的 ' ' 索引(基于 TTL 的索引)和一个以 ' ' 和 ' ' 作为前两个键gTs的复合索引。( )gTsRE_H"gTs_1_RE_H_1_l_1"

现在,我正在尝试执行此查询:

据我所知,这应该使用"gTs_1_RE_H_1_l_1",但令人惊讶的是,它正在使用, "gTs_1"如此输出所述:

但是,如果我提供提示,它确实会选择正确的索引。因此,如果我运行以下查询:

我得到以下输出:

有人可以帮我了解发生了什么!

0 投票
2 回答
2802 浏览

javascript - 在 IndexedDB 中搜索复合索引

在这里阅读了很长时间后,我终于注册了一个问题。我最近一直在搞乱IndexedDB,偶然发现了复合索引的问题(我使用它们与此处的示例类似)。

我在对象存储中有一个带有字符串值和几个整数值的对象。例如:

我在这个对象上创建了一个复合索引,如下所示:

在 html 中,我有几个选择框和一个文本字段,允许用户搜索特定条目。整数作为键范围传递给索引上的 opencursor 函数。然后我在结果集上使用 indexOf(textfield) (就像在此处完成的那样)

如果选择框有值,则该值用作上限和下限。如果未触及选择框,则下限为 1,上限为我声明的 MAX_INT 变量(如此所述)。

示例代码:

当我在所有选择框中设置了所有值时,我可以很好地搜索条目。但是,如果我打开一个字段,它会打乱搜索。假设我没有触及 value1-select 框,并将其他框设置为 2,我将得到 lowerBound = [1,2,2] 和 upperBound = [4294967295,2,2]。这将使我返回 IDB 中的所有条目,它不考虑第二个和第三个值。

这是故意的吗?或者有没有办法解决这个问题?我一直在寻找有关这方面的信息,但似乎陷入了死胡同。我对这个 API 的天真理解使我相信它会在搜索中考虑所有数组字段。由于对象以及我使用的索引比上面的示例复杂得多,因此对多个索引执行搜索会非常混乱。

感谢您的见解!

编辑:在第一条评论之后让它更清楚一点。假设对象存储中有以下对象:

索引按预期方式对其进行排序:

假设现在我搜索范围 (lower[1,1,1] , upper[1,1,1]) 我会得到 obj4。这是所有选择框都选择选项 1 时的行为。现在,如果我搜索 val1 = 1、val2 = unknown 和 val3 = 1 的条目,我得到以下范围:lower[1,1,1],upper[ 1,4294967295,1]。预期结果是 obj4 [1,1,1] 和 obj1 [1,3,1]。结果不是这些,而是​​给了我 4 个命中,即 obj4、obj2、obj5 和 obj1,尽管 obj2 和 obj5 的 val3 与键范围不匹配。

0 投票
1 回答
357 浏览

mongodb - MongoDB 中的复合地理空间索引未按预期工作

集合 nodesWays 具有以下索引:

现在以下两个查询应该返回相同的结果,但它们没有。我想要离指定点最近的 10 家餐厅。第一个查询按应有的方式工作,第二个查询没有按预期工作。

这两个查询之间的唯一区别是第一个查询使用 geo_2dsphere-Index,第二个查询使用 amenity_1_geo_2dsphere-Index。

我对第二个索引的目标是:选择所有餐厅,然后使用 nearSphere-Operator 根据与指定点的距离对它们进行排序

奥夫·维德森

0 投票
1 回答
258 浏览

mongodb - MongoDB索引,是否可以同时创建普通和复合?

我必须为 MongoDb 集合创建索引:

用户

  • _ID
  • 应用程序版本
  • 国家代码
  • facebook_id
  • 令牌
  • 用户身份
  • 设备ID

1. 30%的查询是 {_id, token,device_id}

2.其他常见查询(30%)是 {_id, token}

3.其余(40%)是单独使用的查询: { _id} {device_id} {userid} {facebook_id}

我不知道如何管理它。我几乎可以肯定我需要在{_id:"1" , token:"1",device_id:"1"}上创建一个复合索引。我的问题是:

a)复合索引会优化第一种和第二种情况,对吗?

b)我应该如何处理案例3?为每个字段创建索引?

谢谢!

0 投票
1 回答
296 浏览

mongodb - 查询顺序会影响复合索引的使用吗

MongoDB复合索引支持对索引字段的任何前缀进行查询,但是查询中的字段顺序是否必须与复合索引本身中的顺序匹配?

假设我们有以下索引:

它是否涵盖此查询: