On this page本页内容
db.collection.distinct(field, query, options)
This is a mongosh method. This is not the documentation for Node.js or other programming language specific driver methods.
In most cases, mongosh methods work the same way as the legacy mongo shell methods. However, some legacy methods are unavailable in mongosh.
For the legacy mongo shell documentation, refer to the documentation for the corresponding MongoDB Server release:
For MongoDB API drivers, refer to the language specific MongoDB driver documentation.
Finds the distinct values for a specified field across a single collection or view and returns the results in an array.在单个集合或视图中查找指定字段的不同值,并在数组中返回结果。
field | string | |
query | document | |
options | document |
The db.collection.distinct() method provides a wrapper around the distinct command.db.collection.distinct()方法为distinct命令提供包装。
Results must not be larger than the maximum BSON size. 结果不得大于最大BSON大小。If your results exceed the maximum BSON size, use the aggregation pipeline to retrieve distinct values using the 如果结果超过最大BSON大小,请使用聚合管道使用$group operator, as described in Retrieve Distinct Values with the Aggregation Pipeline.$group运算符检索不同值,如使用聚合管道检索不同值中所述。
The following diagram shows an example 下图显示了一个db.collection.distinct() call.db.collection.distinct()调用示例。
{ collation: <document> }
collation | document |
collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
|
In a sharded cluster, the 在分片集群中,distinct command may return orphaned documents.distinct命令可能会返回孤立文档。
If the value of the specified 如果指定field is an array, db.collection.distinct() considers each element of the array as a separate value.field的值是数组,db.collection.distinct()会将数组的每个元素视为单独的值。
For instance, if a field has as its value 例如,如果字段的值为[ 1, [1], 1 ], then db.collection.distinct() considers 1, [1], and 1 as separate values.[ 1, [1], 1 ],则db.collection.distinct()会将1、[1]和1视为单独的值。
For an example, see Return Distinct Values for an Array Field.有关示例,请参阅返回数组字段的不同值。
When possible, 如果可能,db.collection.distinct() operations can use indexes.db.collection.distinct()操作可以使用索引。
Indexes can also cover索引还可以覆盖db.collection.distinct() operations. db.collection.distinct()操作。See Covered Query for more information on queries covered by indexes.有关索引涵盖的查询的更多信息,请参阅覆盖查询。
To perform a distinct operation within a transaction:要在事务中执行不同的操作,请执行以下操作:
db.collection.distinct() method/the distinct command as well as the aggregation pipeline with the $group stage.db.collection.distinct()方法/distinct命令以及带有$group阶段的聚合管道。For sharded collections, you cannot use the 对于分片集合,不能使用db.collection.distinct() method or the distinct command.db.collection.distinct()方法或distinct命令。
To find the distinct values for a sharded collection, use the aggregation pipeline with the 要查找分片集合的不同值,请改用$group stage instead. $group阶段的聚合管道。See Distinct Operation for details.有关详细信息,请参阅Distinct操作。
In most cases, multi-document transaction incurs a greater performance cost over single document writes, and the availability of multi-document transactions should not be a replacement for effective schema design. 在大多数情况下,与单文档写入相比,多文档事务会带来更大的性能成本,并且多文档事务的可用性不应取代有效的模式设计。For many scenarios, the denormalized data model (embedded documents and arrays) will continue to be optimal for your data and use cases. 对于许多场景,非规范化的数据模型(嵌入式文档和数组)将继续是您的数据和用例的最佳选择。That is, for many scenarios, modeling your data appropriately will minimize the need for multi-document transactions.也就是说,对于许多场景,适当地建模数据将最小化多文档事务的需要。
For additional transactions usage considerations (such as runtime limit and oplog size limit), see also Production Considerations.有关其他事务使用注意事项(如运行时限制和oplog大小限制),请参阅生产注意事项。
Starting in MongoDB 4.2, if the client that issued the 从MongoDB 4.2开始,如果发出db.collection.distinct() disconnects before the operation completes, MongoDB marks the db.collection.distinct() for termination (i.e. killOp on the operation).db.collection.distinct()的客户端在操作完成之前断开连接,MongoDB会将db.collection.distinct()标记为终止(即操作上的killOp)。
Starting in MongoDB 4.4, to run on a replica set member, 从MongoDB 4.4开始,要在副本集成员上运行,distinct operations require the member to be in PRIMARY or SECONDARY state. distinct操作要求该成员处于PRIMARY或SECONDARY状态。If the member is in another state, such as 如果成员处于其他状态,例如STARTUP2, the operation errors.STARTUP2,则操作错误。
In previous versions, the operations can also be run when the member is in 在以前的版本中,当成员位于STARTUP2. STARTUP2中时,也可以运行这些操作。However, the operations wait until the member transitions to 但是,操作会一直等到成员转换到RECOVERING.RECOVERING。
The examples use the 示例使用包含以下文档的inventory collection that contains the following documents:inventory集合:
{ "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
{ "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
{ "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
{ "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }
The following example returns the distinct values for the field 以下示例从dept from all documents in the inventory collection:inventory集合中的所有文档中返回字段dept的不同值:
db.inventory.distinct( "dept" )
The method returns the following array of distinct 该方法返回以下不同dept values:dept值数组:
[ "A", "B" ]
The following example returns the distinct values for the field 以下示例从sku, embedded in the item field, from all documents in the inventory collection:inventory集合中的所有文档中返回嵌入在item字段中的字段sku的不同值:
db.inventory.distinct( "item.sku" )
The method returns the following array of distinct 该方法返回以下不同sku values:sku值数组:
[ "111", "222", "333" ]
Dot Notation for information on accessing fields within embedded documents有关访问嵌入文档中字段的信息的点符号
The following example returns the distinct values for the field 以下示例从sizes from all documents in the inventory collection:inventory集合中的所有文档返回字段sizes的不同值:
db.inventory.distinct( "sizes" )
The method returns the following array of distinct 该方法返回以下不同sizes values:sizes值的数组:
[ "M", "S", "L" ]
For information on 有关distinct() and array fields, see the Behavior section.distinct()和数组字段的信息,请参阅行为部分。
distinctdistinctThe following example returns the distinct values for the field 以下示例从sku, embedded in the item field, from the documents whose dept is equal to "A":dept等于"A"的文档中返回嵌入item字段中的字段sku的不同值:
db.inventory.distinct( "item.sku", { dept: "A" } )
The method returns the following array of distinct 该方法返回以下不同sku values:sku值数组:
[ "111", "333" ]
Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.排序规则允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音标记的规则。
A collection 集合myColl has the following documents:myColl包含以下文档:
{ _id: 1, category: "café", status: "A" }
{ _id: 2, category: "cafe", status: "a" }
{ _id: 3, category: "cafE", status: "a" }
The following aggregation operation includes the Collation option:以下聚合操作包括排序规则选项:
db.myColl.distinct( "category", {}, { collation: { locale: "fr", strength: 1 } } )
For descriptions on the collation fields, see Collation Document.有关排序字段的描述,请参阅排序规则文档。