问题标签 [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.

0 投票
1 回答
271 浏览

javascript - 用 javascript 索引一个 mongo db

我有工作脚本,用于存储我在 mongoDB 中创建的 html 表单。它工作得很棒。但是,我无法搜索我放在 mongo 中的任何数据,因为我没有索引。

我意识到我可以从控制台创建索引,但是为了让我的系统按我们需要的方式工作,我真的需要在存储数据时创建索引。所以,我需要将代码放在实际使用 node.js 或直接创建代码的 javascript 中)。

我尝试了以下 javascript(使用 node.js),但它似乎不起作用。

});

0 投票
2 回答
580 浏览

mongodb - 为什么 MongoDB 不能使用与查询非常相似(不精确)的复合索引?

考虑下面的 Mongo 索引策略和查询,

指数:

询问:

上述查询的解释返回:

这里的问题是它清楚地表明查询完全在 Index(as "indexOnly" : true) 上运行。但是为什么"scanAndOrder" : true
根据Btree索引模型,c在索引的尾部,所以可以用来排序。不?

为什么它不被使用?

0 投票
2 回答
841 浏览

c# - Mongo 显式/隐式和行为不同

基本问题:

以下 2 个查询是否是等效的?

如果是这样,为什么他们表现出不同的行为?(见下文)。如果没有,我如何在 C# 中生成前者?

进一步讨论

我正在索引子文档中的字段。查询 (A) 正确使用索引,但查询 (B) 没有。

这是一些示例代码(它将直接在 mongo 控制台中运行):

第一个查询按预期使用索引。第二个没有。

问题总结

  1. 这两个 find() 查询是否等效?
  2. 如果是这样,为什么他们的行为不同?如果不是,它们有何不同?
  3. 如何在没有 $ 和使用 C# 驱动程序的情况下生成 find()?

编辑--------

作为记录,我在 C# 中使用的语法类似于:

手动生成 QueryDocument 不起作用,因为它不能包含多个 $or 查询,因为 $or 用作字典的键(我需要多个 $or 在我的实际查询中)。

0 投票
1 回答
3479 浏览

node.js - 就 mongoDb 而言,GeoJSON 和 Legacy 坐标对有什么区别?

我正在尝试使用 mongoDb 的 $geoNear 聚合运算符以下列方式计算用户与当前位置的距离:

currentLocation 类似于:

我的收藏属于以下类型(使用猫鼬):

我正在使用索引(再次使用猫鼬的语法):

现在我面临的问题是,如果我使用上面提到的 currentLocation 查询(以 GeoJSON 的形式)我会得到奇怪的距离(非常大的数字),但是如果我使用 currentLocation.coordinates,即使用旧坐标对([-122.1575745 , 37.4457966]),我得到了正确的结果。但是geoNear 的 mongoDb 文档清楚地表明我们可以使用GeoJSON 点或旧坐标对进行查询。

我很想知道 GeoJSON 点和旧坐标对之间到底有什么区别?

例如收集:

结果不正确:

0 投票
1 回答
88 浏览

mongodb - 基于多维度的MongoDB地理空间搜索

完全被这个难住了。假设我的数据库中包含一个名为 的字段的文档userTags,它是一个如下所示的对象:

当我查询该userTags字段时,我想根据特定用户提供的标签进行查询。例如,用户可能在他的帐户上有以下标签:

请注意,这些示例标签都是任意的。搜索可能有 2 个标签,可能有 5,000 个标签,这些都是用户定义的,不幸的是我无法真正控制。我也许可以编写一个脚本来切断除前 5-10 个标签之外的所有标签,但我不想低于这个值。

目前我只是在做一个sort()基于计数最多的标签的功能,例如:

在大多数情况下,这有点工作,但我想要一些更适合相关用户的东西。例如,尽管从用户的角度来看aaa,它几乎与. foofooaaa

到目前为止,地理空间索引似乎是最好的选择。但是,我在这里有两个主要问题:

  1. 我不能ensureIndex继续,userTags.[tagname]因为这些是用户定义的,它们有数千个,而且它们在不断变化。
  2. 据我所知,地理空间索引仅适用于二维。

我在这里有什么选择?我从未使用过 Mongo 的地理空间功能,所以我可能完全忽略了这一点,我可以将索引userTags作为一个整体并对其包含的标签运行地理空间搜索吗?

0 投票
0 回答
127 浏览

mongodb - 使用 $in 查询包含数组的字段时的排序索引

我正在使用运算符查询数组$in,并且我也在尝试对结果进行排序,但我不断收到此错误:

没有索引的 sort() 数据太多。添加索引或指定较小的限制

我知道排序限制为 32 兆字节,否则您必须使用索引。问题是我在查询的字段和排序的字段上有一个复合索引。

收藏:

查询如下所示:

$in查询包含大约。要匹配的 2000 个 ID。

指数是

如果我explain()在没有执行查询的情况下sort()使用,我可以看到 MongoDB 正在使用该索引来执行查询,但它显然不能使用相同的索引来执行排序。我也尝试使用 a skipand limit,但如果我使用 askip太大,我会得到同样的错误,可能是因为 index 不用于排序。

如果我只在字段上创建索引,bMongoDB 会很乐意为我对数据进行排序。但我真正想要的是对索引数组字段执行搜索并对数据进行排序。

我查看了文档,但找不到任何有用的东西。我是在 MongoDB 中遇到错误还是我做错了什么?

0 投票
1 回答
1031 浏览

mongodb - mongoquery 是否使用默认 _id_ 索引?

假设,我们有如下提到的 mongo 集合

db.test.findOne() { "_id" : ObjectId("52d0313dc62b629cfabe22ff"), "a" : 1, "b" : 1, "c" : 1 }

这个集合有超过百万条记录。

现在,如果我想找出条件为字段“a”大于 1000 和“b”字段小于 9000 的记录,那么我的 mongo 查询可能像..

db.test.find({'a':{'$gt':1000}, 'b':{'$lt': 9000}}, {'a':1, 'c':1}) 和使上述搜索更快,我已经在“a”和“b”字段上应用了复合索引。它已被上述查询使用..

现在,您必须知道,所有集合都带有默认索引“ _id_ ”字段作为主键。

我上面的 mongo 查询是否使用了默认索引“ _ id _ ”?如果是,那怎么办?如果不是,那为什么?

谢谢你 javaamtho

0 投票
1 回答
5736 浏览

mongodb - 2dsphere vs 2d index:哪个“更好”/更快?

我有一个数据库,其中只有我的文件Points。我考虑添加一个地理空间索引。所以我可以从2dsphere2d中进行选择。

MongoDB.org 有:

2dsphere 索引支持:

二维索引支持:

但是,由于我的所有文档都是点,因此我可以在我的架构中使用以下选项之一,而没有太大区别。

对于 2dsphere:

或二维索引:


我的问题归结为哪个更快?我真的不知道如何衡量它。

问题假设我只想查询一个正方形box数据并且不关心复杂的多边形搜索:要么使用仅受二维索引支持的$box (如果我没看错的话),要么使用$geoWithin的$polygon方法两个索引都支持。

0 投票
1 回答
354 浏览

mongodb - mongodb中二维嵌套数组的投影和索引

我有几个与这样的嵌套数组相关的问题(请注意,几乎所有标题中带有嵌套数组的 SO 问题实际上都是指嵌套在根文档中的单个数组,而不是 2D 嵌套数组。尽我所能告诉,这不是重复的)。

  • 如上所述,有什么方法可以在二维嵌套数组上执行投影?
  • 如何在 foo 数组的第二个元素上创建索引?同样,大概 foo.1 不起作用。

我知道正确的答案 (TM) 是不这样做并使用一组子文档,虚拟 (NDTAUAAOSD) 但 a) 好奇心 - 我似乎找不到答案 b) 不幸的是,我无法控制的情况决定了文档结构体。

更新:澄清我想从预测中看到的内容:

基本上是对内部数组进行切片。

0 投票
3 回答
2041 浏览

mongodb - 如何定义复合和哈希 mongodb 索引?

我知道复合索引是这样定义的:

和一个像这样的简单索引:

问题是如何实现两者?