问题标签 [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.
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 可以使用检索和排序查询结果的索引。”
我错过了什么?
提前致谢
mysql - 应该按哪个顺序(表列或查询)组合索引?
我有一个样本表,例如-
现在看看索引eve_hour_index(evedate,hour)和eve_msisdn_index(evedate,msisdn)的顺序。但我最后宣布了evedate。
我在某处读到复合索引中的顺序很重要。那么是哪个顺序呢?查询中的顺序还是表中的顺序?
我是否必须将此复合索引重写为 eve_hour_index(hour,evedate) 和 eve_msisdn_index(msisdn,evedate)?
还是第一个是正确的?
谢谢你。
mongodb - 具有地理位置的Mongo复合索引不起作用
我很难处理应该是微不足道的事情......
我有以下个人资料文档结构:
我的应用程序中的一个常见用例是检索按年龄过滤的附近个人资料。
所以我创建了以下复合索引:
而且无论我做什么,我都无法使用创建的索引运行查询(也尝试使用提示),
这是为查询生成的解释:
我正在使用 mongodb 2.4.4 版。
我究竟做错了什么?非常感谢您的回答。
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?在上面文章的底部,有人提到了一个我认为可以工作的相交函数,但是当我在网上搜索时,它似乎不存在......
干杯,
担
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”字段表示包含该月每一天的数据的文档数组。
mongodb - Mongodb使用错误的索引
我在一个集合上有多个索引,如下所示。特别是我想要一个查询使用"gTs_1_RE_H_1_l_1"
,但查询正在使用"gTs_1"
!
在这里,我有一个单独的 ' ' 索引(基于 TTL 的索引)和一个以 ' ' 和 ' ' 作为前两个键gTs
的复合索引。( )gTs
RE_H
"gTs_1_RE_H_1_l_1"
现在,我正在尝试执行此查询:
据我所知,这应该使用"gTs_1_RE_H_1_l_1"
,但令人惊讶的是,它正在使用,
"gTs_1"
如此输出所述:
但是,如果我提供提示,它确实会选择正确的索引。因此,如果我运行以下查询:
我得到以下输出:
有人可以帮我了解发生了什么!
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 与键范围不匹配。
mongodb - MongoDB 中的复合地理空间索引未按预期工作
集合 nodesWays 具有以下索引:
现在以下两个查询应该返回相同的结果,但它们没有。我想要离指定点最近的 10 家餐厅。第一个查询按应有的方式工作,第二个查询没有按预期工作。
这两个查询之间的唯一区别是第一个查询使用 geo_2dsphere-Index,第二个查询使用 amenity_1_geo_2dsphere-Index。
我对第二个索引的目标是:选择所有餐厅,然后使用 nearSphere-Operator 根据与指定点的距离对它们进行排序
奥夫·维德森
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?为每个字段创建索引?
谢谢!