Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在MongoDB中,如何找到大型切分集合的不同值?

在MongoDB中,如何找到大型切分集合的不同值?
EN

Stack Overflow用户
提问于 2016-09-29 10:27:14
回答 1查看 2K关注 0票数 1

我有一个大型mongodb集合:

  • 有三个碎片,
  • 总计3亿项记录(至少)
  • 切分键是(字段1:1,字段2:1)
  • 还有其他非索引字段。
  • Field1是一个~200个字符字符串。
  • Field2是一个整数。
  • Field1大约有10M个不同的值,而且一直有更多的附加值。

第1部分:不同值

我需要找到field1的所有不同值。

调用db.myCollection.distinct("field1")失败,因为结果集中有超过16 in的数据。

因为shard键是一个索引,这应该是一个覆盖的查询。

第2部分:返回排序结果

假设上面有一个答案,我想从失败中恢复,也就是,按顺序返回结果。这并不重要。

排序输出的目标:如果查询在中途失败,我可以通过添加field1:{$gt:lastGoodValue}的查询说明符,从停止的地方恢复。

那么:这有可能吗?容易吗?我必须聚合还是映射减少?目前,我正在迭代所有3亿条记录,它不必要地推送了大量数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-29 22:08:50

集合不同的命令(doc链接)返回一个变量,一个数组。此变量作为BSON文档发送,其中MongoDB中的最大大小限制为16 max。

在数组中设置结果集对于某些情况是方便的,但是如果它不一定适合16 as,那么您将无法像您所发现的那样使用它。

第一部分:答案

相反,您可以在聚合命令中使用检索不同的值阶段的$group。您也可以使用MapReduce,但是聚合具有更好的性能,因此我将重点讨论这一点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.myCollectoin.aggregate( [ { $group : { _id : "$myField" } } ] )

这将将结果从单个数组变量更改为游标,与常规查询/查找命令相同。因此,迭代不同的值客户端的方式是不同的,但是您可以继续获取越来越多的值,直到游标完成为止。

使用相同的命令,无论您有集群、副本集,还是独立的单神。一个重要的性能考虑是是否对被明确分组的字段进行了索引,但是正如您提到的,这个字段是一个切分键中的主导字段,我们知道它是。

第二部分:答案

是的,你可以把它分类。在$sort后添加一个$group阶段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.myCollection.aggregate( [ 
  { $group : { _id : "$myField" } }, 
  { $sort: { "_id": 1 } } 
] )

如果您必须从某个点重新启动查询,您将添加一个$match阶段作为聚合管道中的第一个操作。例如{ $match: {"myField": { "$gt": "AbCdEf...."} } },

的新用户注意:在$sort阶段的第二个"_id“是$group阶段的"_id”字段输出,即不同的"myField“值。它不是由基础集合中的"_id“值来分类的。

如果您愿意的话,使用$project阶段可以重命名中间阶段的"_id“键名。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.myCollection.aggregate( [ 
  { $group : { _id : "$myField" } }, 
  { $project : { 
     "_id" : false, /*stop it appearing as "_id" */
     "myField" : "$_id" /*put original field name "myField" back on*/
  } }, 
  { $sort: { "myField": 1 } } 
] )
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39777491

复制
相关文章
在Java中如何加快大型集合的处理速度
作者 | Nahla Davies 译者 | 明知山 策划 | 丁晓昀 本文讨论了 Java Collections Framework 背后的目的、Java 集合的工作原理,以及开发人员和程序员如何最大限度地利用 Java 集合。 1 什么是 Java 集合 尽管 Java 已经过了 25 岁生日,仍然是当今最受欢迎的编程语言之一。超过 100 万个网站通过某种形式在使用 Java,超过三分之一的软件开发人员的工具箱中有 Java。 Java 在它的整个生命历程中经历了重大的演变。一个早期的
深度学习与Python
2023/03/29
1.9K0
在Java中如何加快大型集合的处理速度
一日一技:在 MongoDB 中,如何批量更新不同数据为不同值?
我们知道,当使用 Pymongo 更新MongoDB 字段的时候,我们有两种常见的方法:
青南
2021/06/23
4.8K0
一日一技:如何找到 MongoDB 占用空间最大的集合?
我的 MongoDB 上面有很多库,每个库里面有很多集合。他们占用了太多的储存空间。现在我想找到占用空间最大的10个集合,应该如何操作?
青南
2020/08/27
2.9K0
一日一技:如何找到 MongoDB 占用空间最大的集合?
控制MongoDB中的集合分布
分片标记(Shard tagging)是MongoDB 2.2.0版中的一项新功能。通过对集合进行标记使其被强制写入到本地数据中心,也可以用来将某个集合固定到一个分片或一系列分片中。
Sepmer Fi
2018/01/10
2K0
控制MongoDB中的集合分布
Python+OpenGL切分图形窗口在多视区中显示不同动画
编写Python程序,调用OpenGL,切分图形窗口,在不同的视口中显示旋转的三角形。
Python小屋屋主
2022/04/13
9920
Python+OpenGL切分图形窗口在多视区中显示不同动画
MongoDB 中的集合和元数据
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
RiemannHypothesis
2022/11/05
1.9K0
如何根据特定值找到IDOC
IDOC的官方名称叫Intermediate Document,用于两个模块,或者两个系统间交换信息。
用户5495712
2020/10/22
1.8K0
如何根据特定值找到IDOC
java中==、equals的不同AND在js中==、===的不同
       1.==操作符:首先,对于非基本数据类型的对象比较,相同内存中存储的变量的值是否相等,注意是相同内存地址的才可,并且数值相同(当然地址相同,值也一定相同)才会返回true.     但是,对于基本数据类型的比较(比如:int flot double等),值相同,"=="比较便会返回true.(这是编译的规则,当进行基本数据类型的比较时,会编译生成if_icmpne指令不会进行比较地址。而进行对象比较时,会生成if_icmpne指令,会比较地址。生成的指令都是不同的)。
洋仔聊编程
2019/01/15
4K0
MongoDB(三)—-MongoDB的集合操作
MongoDB使用db.createCollection()函数来创建集合。 语法格式:db.createCollection(name, options) name: 要创建的集合名称。 options: 可选参数, 指定有关内存大小及索引的选项。
全栈程序员站长
2021/04/07
9510
mongodb 集合_mongodb原理
默认情况下,对比事务安全,MongoDB更关注高的插入速度。如果你需要加载大量低价值的业务数据,那么MongoDB将很适合你的用例。但是必须避免在要求高事务安全的情景下使用MongoDB,比如一个1000万美元的交易。
全栈程序员站长
2022/11/15
2K0
mongodb 集合_mongodb原理
MongoDB 数组在mongodb 中存在的意义
在MOGNODB 的文档设计和存储中,存在两个部分 1 嵌套 2 数组,所以如果想设计好一个MONGODB 在理解业务,读写比例,查询方式后,就需要介入到更深层次的理解嵌套的查询方式,嵌套多层后的性能问题, 数组其实比嵌套带来更多的问题,所以今天我们的从数组开始。
AustinDatabases
2022/04/05
4.2K0
MongoDB  数组在mongodb 中存在的意义
[Office] 在Excel中,如何根据值求出其在表中的坐标
在使用excel的过程中,我们知道,根据一个坐标我们很容易直接找到当前坐标的值,但是如果知道一个坐标里的值,反过来求该点的坐标的话,据我所知,excel没有提供现成的函数供使用,所以需要自己用VBA编写函数使用 (代码来自互联网)
轻舞飞扬SR
2021/02/24
8.8K0
如何优雅地实现判断一个值是否在一个集合中?
如何判断某变量是否在某个集合中?注意,这里的集合可能并不是指确定的常量,也可能是变量。
编程珠玑
2021/01/05
1.8K0
MongoDB的集合(一)
MongoDB是一种流行的NoSQL数据库,集合(Collection)是MongoDB的一个基本概念。集合是MongoDB中一组文档的容器,每个文档代表一个记录。在MongoDB中,文档可以看做是表中的一行数据,而集合则相当于表。
堕落飞鸟
2023/05/09
8080
MongoDB的集合(二)
MongoDB提供了丰富的查询操作符,可以根据条件查询文档。以下是一些常见的查询操作符:
堕落飞鸟
2023/05/09
2970
Wiredtiger 在MONGODB 中的疑问
MongoDB 中也有类似MYSQL 的数据库引擎的插件化的概念,虽然MYSQL 被ORACLE 搞得现在对这个数据库的引擎认知都存在于INNODB,但实际上MYSQL 在之前的存储引擎还是丰富多彩的,MONGODB 的存储引擎也是如此,目前MONGODB 主推的(官方)的数据库引擎是 WIREDTIGER ,之前MONGODB 官方的数据库引擎是 MMAP1, 而实际上MONGODB 还有一个数据库引擎脚ROCKS DB,听说是不错,至少和WIRETIGER 平分秋色,甚至略胜一筹。
AustinDatabases
2019/06/21
1.8K0
Wiredtiger 在MONGODB 中的疑问
forEach在集合中的使用
任何类型Collection的可迭代 - 列表,集合,队列 等都具有使用forEach的相同语法。
崔笑颜
2020/06/08
3.5K0
在 TS 中如何处理特殊值
添加特殊值的一种方法是创建一个新类型,该类型是一些特殊值的基本类型的超集,这些特殊值称为哨兵。
阿宝哥
2020/04/08
2.4K0
如何查看MongoDB分片chunksize的值的大小
原创 NoSQL 作者:chenfeng 时间:2016-08-03 18:25:25  3580  0
拓荒者
2019/09/11
2.8K0
点击加载更多

相似问题

MongoDB中的切分集合

21

如何更新mongodb集合的切分键

11

Mongodb -切分和未分割的集合

11

无法在MongoDB中获得切分集合的覆盖查询

11

如何更新大型mongodb集合?

212
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文