distinct
¶在单个集合中查找指定字段的不同值。distinct
返回包含不同值数组的文档。返回文档还包含带有查询统计信息和查询计划的嵌入式文档。
该命令采用以下形式
该命令包含以下字段:
领域 | 类型 | 描述 |
---|---|---|
distinct |
串 | 要查询不同值的集合的名称。 |
key |
串 | 要为其返回不同值的字段。 |
query |
文献 | 可选的。一个查询,指定要从中检索不同值的文档。 |
readConcern |
文献 | 可选的。指定读取关注。 从MongoDB 3.6开始,readConcern选项具有以下语法: 可能的阅读关注级别为:
有关阅读关注级别的更多信息,请参阅 阅读关注级别。 |
collation |
文献 | 可选的。 指定 用于操作的排序规则。 归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。 排序规则选项具有以下语法: 指定排序规则时,该 如果未指定排序规则,但是集合具有默认排序规则(请参阅参考资料 如果没有为集合或操作指定排序规则,则MongoDB使用先前版本中使用的简单二进制比较进行字符串比较。 您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。 3.4版的新功能。 |
注意
结果不得大于最大BSON大小。如果结果超过最大BSON大小,使用聚合管道检索使用不同的值$group
运算符,如描述
检索与聚合管道重复值。
MongoDB也提供了外壳包装方法
db.collection.distinct()
的distinct
命令。另外,许多MongoDB 驱动程序
提供了包装方法。请参阅特定的驱动程序文档。
如果指定的值field
是一个数组,
distinct
则将数组的每个元素视为一个单独的值。
例如,如果一个字段具有作为它的值,则
认为,和作为单独的值。[ 1, [1], 1 ]
distinct
1
[1]
1
有关示例,请参见返回数组字段的不同值。
在事务中执行不同的操作:
对于未分片的集合,您可以在舞台上使用
db.collection.distinct()
method /
distinct
command以及聚合管道$group
。
对于分片集合,不能使用
db.collection.distinct()
方法或
distinct
命令。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
这些示例使用inventory
包含以下文档的集合:
下面的示例从集合中的所有文档返回sku
嵌入在item
字段中的字段
的不同值
inventory
:
该命令返回一个文档,该文档的名称字段values
包含不同的sku
值:
也可以看看
点符号,用于获取有关嵌入式文档内字段的信息
3.4版的新功能。
归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
集合myColl
包含以下文档:
以下聚合操作包括“ 排序规则” 选项:
有关整理字段的说明,请参见 整理文档。
要覆盖默认的阅读关注级别"local"
,请使用readConcern
选项。
对副本集的以下操作指定“
读取关注点”,"majority"
以读取已确认已写入大多数节点的数据的最新副本。
注意
若要使用关注级别"majority"
,副本集必须使用WiredTiger存储引擎。
您可以"majority"
为具有三名成员的主次仲裁器(PSA)架构的部署禁用读取关注。但是,这对变更流(仅在MongoDB 4.0和更早版本中)和分片群集上的事务有影响。有关更多信息,请参见禁用多数阅读关注。
无论读关注级别如何,节点上的最新数据都可能无法反映系统中数据的最新版本。
为确保单个线程可以读取其自己的写入,"majority"
请对"majority"
副本集的主数据库使用
读取关注和写入关注。